Всем привет!
Собственно, пытаюсь сделать простенькую игру для набития руки, и столкнулся со следующей проблемой которую не понимаю как реализовать.
Вот есть у нас, допустим, склад, и необходимо чтобы каждую секунду "отработавшая шахта" приносящая 5 ед. ресурса не уходила в пустоту, а это значение добавляла к текущему показателю склада.
Как это можно реализовать?
Первая мысль была связана с cron, но при наличии, допустим, тысячи таких операций каждую секунду, кажется, будет слишком высокая нагрузка на сервер. Есть ли другие пути или можно сильно не беспокоиться о нагрузке от крона?
1. arxnday - 29 Ноября, 2015 - 02:39:35 - перейти к сообщению
2. MiksIr - 29 Ноября, 2015 - 02:44:17 - перейти к сообщению
А зачем тебе хранить текущее состояние, если ты его всегда можешь посчитать. Обновляй базу на операциях списания (опустошение склада, например, или пролучение бонуса), а текущее состояние посчитаешь как "последниее состояние + (текущее время - время последнего состояния) * прирост".
Ну как вариант, ваще не очень в геймдеве.
Ну как вариант, ваще не очень в геймдеве.
3. arxnday - 29 Ноября, 2015 - 02:56:03 - перейти к сообщению
MiksIr пишет:
А зачем тебе хранить текущее состояние, если ты его всегда можешь посчитать. Обновляй базу на операциях списания (опустошение склада, например, или пролучение бонуса), а текущее состояние посчитаешь как "последниее состояние + (текущее время - время последнего состояния) * прирост".
Ну как вариант, ваще не очень в геймдеве.
Ну как вариант, ваще не очень в геймдеве.
Хм, спасибо за наводку на еще один вариант реализации)
Хотя на операциях списания не вариант, нужно чтобы при каждом обновлении страницы выводилось точное значение хранящегося на складе ресурса
получается, если правильно в 3 часа ночи понял такая очередность:
1. результат = (текущий timestamp - timestamp с бд) * прирост в секунду
2. состояние склада += результат
3. обновление значения timestamp
Спасибо!
4. MiksIr - 29 Ноября, 2015 - 03:14:18 - перейти к сообщению
Зачем тебе "3. обновление значения timestamp"?
5. arxnday - 29 Ноября, 2015 - 03:38:05 - перейти к сообщению
MiksIr пишет:
а что, в таблицу потом не нужно заносить значение последнего проведения операции?)
Зачем тебе "3. обновление значения timestamp"?
6. MiksIr - 29 Ноября, 2015 - 04:51:28 - перейти к сообщению
Для операции - надо. Но "показать сколько на складе" - это не операция. Т.е. заносите таймстамп только если тратите со склада, или если пришли какие-то бонусы за достижения, или если число прироста в секунду меняется (апнули шахту) и т.д.
А если просто показываете состояние - зачем заносить его, если можно продолжать расчитывать... будет просто "текущий timestamp" увеличиваться и все.
В базах данных если можно лишний раз не писать - лучше не писать.
А если просто показываете состояние - зачем заносить его, если можно продолжать расчитывать... будет просто "текущий timestamp" увеличиваться и все.
В базах данных если можно лишний раз не писать - лучше не писать.
7. lastdays - 29 Ноября, 2015 - 08:37:12 - перейти к сообщению
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- function update_store ( $lastom )
- {
- //- Получаем время последнего обновления
- //- Сколько ресурсов в секунду
- return $resource_tick;
- }
- function test( $par )
- {
- if ( $par < 0 ) $par = 0;
- return $par;
- }
Для примера и незачем каждую секунду обновлять. Записывай в БД или куда удобно время последнего обновления