2015-10-16 2 views
0

Я создаю небольшую браузерную игру, и я программирую обработчик ресурсов.
Я использую базу данных PHP и MySQL. я понял, что я не могу обновить базу данных каждую секунду, чтобы увеличить свои ресурсы, поэтому чтение на Stackoverflow, я нашел этот пост:Браузерная игра PHP + MySQL увеличивает ресурс каждую секунду

Я также пытаюсь сделать онлайн-игры в PHP и сталкиваются также этот проблема. Мое решение было довольно простым. Предполагая, что вы используете , используя разные города или планеты, вам понадобится таблица базы данных для города/планеты. В этой базе данных хранятся текущие ресурсы и ресурсов в час. А также временную метку.

Для обновления ресурсов объекта (золото шахты, например) у меня есть база данных , который имеет все здание Ques с начальным время и закончить время.

Тогда я сделал страницу, которую я включил на каждую страницу в игре. Это сначала проверяет, есть ли - любые строительные вопросы для выбранного города, которые должны быть закончены, так как была введена последняя база данных. Если это золото мин было закончено, позвольте сказать 12.00, а метка времени в вашем городе 11.00, а текущее время - 13.00. Что делает страница, она вычисляет все ресурсы за время с 11.00 до 12.00. Затем он обновит золото в час на столе города. И затем он пересчитывает ресурсы с 12.00 до 13.00.

Когда все вышеописанное сделано, оно помещает отметку времени на ток. Но как у вас есть все ресурсы в час со второго запуска, вы можете сохранить в массиве и позволить локальному таймеру запускать обновление ресурсов на экране . Но поскольку вы включаете вышеупомянутую страницу на каждую страницу, , когда вы переходите на следующую страницу, она получит доступ к базе данных, чтобы узнать, что должно быть . Таким образом, локальные данные предназначены только для просмотра . По DutchEcho

Это ссылка: LINK

Я запрограммировал очередь событий, и все в порядке. Проблема заключается в том, чтобы увеличить ресурс, если игрок находится в сети.
Если я сохранить last_login игрока по time(), а затем рассчитать новый объем производства у меня есть проблема:

"UPDATE `stats` SET `rock` = `rock`+(('".time()."' - $last_login)*$rock_production) 

я делаю: время() - $ last_login. Если я сохраняю last_login каждый раз, когда игрок перезагружает или меняет страницу, это различие всегда будет 0.
Потому что два раза равны.
Как я могу увеличить свой ресурс каждую секунду?

ответ

0

Вместо обновления last_login при каждой загрузке страницы обновляется только при запуске сеанса. У вас может быть второе поле, которое вы обновляете при каждой загрузке страницы, и используйте разницу для своих вычислений. Эти два поля также могут использоваться для указания продолжительности самого последнего «времени на линии» даже после отключения пользователя.

[править]:

Как об использовании триггера обновления? В одном заявлении вы должны иметь оба значения last_login - новое значение и исходное значение.

+0

привет, спасибо, что ответили. Я могу это сделать, но я думаю, что моя проблема будет такой же. Я всегда буду вычислять 0-разницу, а также, я не могу использовать last_login (сохраненный при запуске сеанса) в разнице между last_login и current_time, игрок, вероятно, потратит некоторый ресурс. – Vito

+0

- это вопрос о дыре? так что вы обновите все ROW –

+0

нет, это часть кода – Vito

Смежные вопросы