| TurboDizel |
19.01.2015 04:58 |
Цитата:
Сообщение от Godwarlock
(Сообщение 1177710)
Всем привет. При разработке игры, возник один вопрос. В ходе игры создаются объекты, которые двигаются в направлении друг к другу, соответственно меняются их координаты. Таких объектов может быть создано в клиенте от 1-50 и десятая часть может быть задействована в клиенте. То есть на сцене таких 10 объектов, у которых меняются координаты. Суть вопроса в том, что мне надо как-то сохранять все координаты объектов в базе данных mysql, на тот случай, если пользователь покинул страницу или у него отключился интернет, но при этом, чтобы в последующем заходе в игру, сохранилось всё так, как было до его отключения. Подскажите, как можно осуществить данное. Не создавать же поля в бд для каждого объекта и сохранять туда координаты. Какие есть решения вообще в такой ситуации?
|
Можно сделать как нибудь вот так, но в правильности данного метода я не уверен). Делаете таблицу в БД, например, saved_games, в которой будут все сохраненные (не законченные) игры. В таблице будет поле uniq (автоинкремент как всегда), id (идентификатор игрока, который играет) и data (данные об объектах, тип varchar на символов эдак 1000, но это Вам виднее на сколько). В игре каждую минуту (смотря какая игра, опять таки Вам виднее, какой интервал выбрать) отправлять в БД запрос на сохранение состояния игры. Как что отправить я так понимаю Вы знаете, а именно интересует в каком виде отправить данные, так вот пусть будет переменная типа String и выглядит, например, вот так: "0,100,200;1,110,220". Здесь точка с запятой разделяет Ваши объекты, а запятая разделяет данные для каждого объекта. Ну и понятно эту строку пихаете в поле data. Вот так сохраняете в течении игры, и если игра вылетит, то при следующем входе проверяйте, есть ли в таблице saved_games запись с id того игрока, который входит, и если запись есть, значит он не доиграл, и нужно взять эти данные, и по ним нарисовать уровень (разбить строку по ";", а потом по "," каждый элемент массива после разбиения). Если такой записи нет, значит создаешь новую игру. А если игрок доиграл свою игру, то в конце удаляешь запись из этой таблицы с id этого игрока.
P.S. Строка "0,100,200;1,110,220" это только пример, куда более удобнее было бы наверное использовать JSON, если у объекта много свойств, и хочется общаться к ним не как к [0], [1], а как к ['x'], ['rotation'].
|