Начните измерять, сколько времени занимает запрос к базе данных, когда вы запускаете его за пределами вашего iPhone.
Затем измерьте, сколько времени потребуется, когда вы отправляете тот же http-запрос от чего-то другого, чем ваш iPhone (например, это программа c # из 10-15 строк, чтобы понять это).
Если ни один из вышеперечисленных не демонстрирует каких-либо значительных задержек, улучшения необходимо выполнить на стороне iPhone. Некоторые вещи, на которые стоит обратить внимание:
- GPRS / 3G имеет довольно высокую задержку
- GPRS / 3G имеет довольно высокую частоту ошибок по битам - это означает, что будет время от времени отбрасываться немало пакетов, что приведет к повторной передаче tcp, и вы будете иметь еще большую задержку
- HTTP имеет много накладных расходов.
JSON добавляет много накладных расходов.
Может быть, вам нужно придумать компактный двоичный формат для ваших сообщений и отбросить HTTP в пользу пользовательского протокола - возможно, даже вернуться к UDP
Вышеуказанные пункты, как правило, не применяются, но они применимы, если вам нужно обеспечить плавное взаимодействие при высокой задержке, низкой полосе пропускания и слабых соединениях.
- Как минимум, убедитесь, что вы не устанавливаете новое TCP-соединение для каждого запроса. Вам нужно использовать http keep-alive.
У меня нет никакой конкретной информации об алгоритмах движения игроков, но часто используется какой-то прогноз движения.
Вы знаете направление движения игрока, вы можете определить скорость, если она не всегда постоянна - это означает, что вы можете интерполировать по времени и угадывать его новую позицию, корректировать позицию на экране, пока вы запрашиваете фактическую позицию и вернитесь к фактической позиции, когда получите ответ на запрос.
Хитрость заключается в том, чтобы всегда интерполировать во времени в определенных границах. Если ваш прогноз был немного неверным по сравнению с тем, что возвратил запрос, немедленно не привязывайте позицию обратно к реальной позиции. Выполните интерполяцию между текущей позицией и желаемой позицией по нескольким кадрам.