2010-01-17 7 views
2

Я хотел бы создать веб-игру, похожую на Travian-like (или Ikariam-like). Игра будет в PHP & MySQL. Интересно, как я могу достичь живого обновления атрибутов игры.Как обновить атрибуты игры браузера, такие как 4 resouces в игре в Travian?

Для интерфейса, я могу достичь с помощью вызовов AJAX (получить последние значения из базы данных) или даже поддельное обновление значений (не переданных с сервером).

Для бэкэнда это выполняется заданием PHP cron (которое выполняется каждые несколько секунд)? Если да, может ли кто-нибудь предоставить мне несколько образцов кода?

Кстати, я знаю, что это будет проблемой, если я использую IIS + FastCGI.

=== Информация о версии ===

PHP: 5.2.3

IIS 6.0 с FastCGI

ОС: Windows Server 2003 Standard R2

+2

Я уверен, Travian и т.д. использовать то, что вы называете «поддельные обновления и значение». На странице, вероятно, есть две части данных, когда вы ее загружаете: текущий уровень ресурсов (x) и скорость увеличения (y). Тогда это просто чистый javascript - каждые несколько секунд они добавляют y в x. Нет проверки с сервером и т. Д. Вы можете проверить это, открыв две вкладки. Оставьте свои ресурсы подсчетом в одном и сделайте покупку в другом. Покупка со второй вкладки не будет вычитаться из первой. Таким образом, очевидным недостатком этой техники является ее неточность; Преимуществом является его простота. –

ответ

6

Правильный ответ зависит от ваших конкретных потребностей.

Всегда ли получают ресурсы с одинаковой скоростью? Если это так, простое решение состоит в том, чтобы отслеживать, сколько времени их пользователь существует, вычислить количество ресурсов на основе скорости, которую они получают, и вычесть количество ресурсов, которые они потратили в общей сложности. Это будет немного проблемой, если скорость может когда-либо измениться, поэтому, если вы используете это решение, вы сильно зацикливаетесь на скорости, которую вы выбираете, за исключением случаев, когда вы полностью переписываете обработку (например, ниже) ,

Если меняется, как быстро люди могут получить ресурсы, вам необходимо периодически обновлять данные. Задача cronjob/schedule будет хорошо работать, чтобы убедиться, что все обновлены, но в некоторых ситуациях было бы лучше просто определить, сколько времени прошло с тех пор, как вы обновили ресурсы каждого пользователя, а затем обновите их при каждой загрузке каждой страницы при входе в систему путем умножения времени, в течение которого они были в стороне от скорости, с которой они получают ресурсы - таким образом, вы избегаете обновления до тех пор, пока вам не понадобится новое значение.

1

You также может вычислять ресурсы при каждом просмотре страницы или javascript. Вам нужно будет сохранить последнее обновленное время.

0

Для того, чтобы травиан, как управление ресурсами, вам нужно отслеживать, когда вы обновляете ресурсы пользователей в последний раз. Если вы читаете значения ресурсов (для обновления страницы или что-то еще), вам нужно добавить количество ресурсов, полученных с момента последнего обновления (в зависимости от количества полей ресурсов и бонусов пользователя) и отправить это значение в браузера. Вы можете также позволить сценарию браузера рассчитать эти суммы.

Возможно, вам потребуется кэшировать все суммы ресурсов как-то, так как эти значения необходимы много, улучшая связь с вашей базой данных.

Если пользователь завершает строительство поля ресурсов, использует рынок, строит структуру и т. Д., Вам необходимо обновить количество ресурсов (и «последнее время обновления»), поскольку вы не можете отслеживать такие события просто.

При вычислении ресурсов уменьшается загрузка базы данных, поскольку вам не нужно писать новые значения каждый раз, когда пользователь обновляет страницу браузера. Это также более точно, так как у вас меньше ошибок округления.

Чтобы увеличить объем ресурсов между обновлениями страницы, вам нужен метод, описанный Фрэнком Фармером. Просто вставьте количество ресурсов и «частоту усиления» в некоторый javascript и увеличьте количество ресурсов на каждую «частоту усиления» на единицу.

0

Это может быть старый пост, но он сразу же появляется в Google, вот еще один вариант, который, как я развиваю, делает это.

Я использую JavaScript на стороне клиента, который использует флэш-сокет для получения живых обновлений с выделенного игрового сервера, запущенного на хосте.

Я использую комплект XMLSocket из http://devpro.it/xmlsocket/

+0

Это решение работает не очень хорошо, поскольку Flash не поддерживается в мобильных браузерах. Кроме того, современные браузеры имеют сетевые сокеты. – Raptor

+0

во время ответа было еще много компьютеров, работающих под управлением Windows XP, у которых была ограниченная поддержка веб-сокетов, поскольку XP не мог работать над IE 8, поэтому поэтому я сделал сообщение, не говоря уже о поддержке мобильного HTML5 3 года назад был также по-прежнему пятнистым в лучшем случае, не говоря уже о том, что Vista также не может запускать IE 10, которая является самой низкой версией IE для их поддержки –