![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 5
|
Разрабатываю онлайн игру во Flash. Действия в игре проходят в реальном времени. Игра работает по принципу постоянного обмена данными между флешем и базой данных MySQL. Запись и загрузка данных в БД обеспечивается отдельными php-скриптами.
Герой бегает по полю, а его координаты постоянно сохраняются в БД. Если перезапустить игру и снова зайти в нее, его координаты должны считаться из БД и герой должен оказаться на том же месте, при котором он был когда вышел из игры. Сначала все идет нормально. Когда игрок бегает по полю, координаты успешно сохраняются в БД. Но когда я перезапускаю страницу и вновь захожу в игру, то герой почему-то оказывается на той позиции на которой был и при предыдущем входе в игру. Допустим по умолчанию герой находится в координатах 100;100. Я перевожу его в координаты 200;100. Проверив БД я могу убедится что в ней сохранились координаты 200;100. Но когда я перезапускаю страницу и вновь захожу в игру, игрок снова стоит в координатах 100;100. Перевожу героя в другие координаты, выхожу, захожу опять, а герой снова стоит в координатах 100;100. Однако если повторно зайти в игру через некоторое время (например через 10 минут), то координаты считаются из БД успешно и герой станет в позиции, где я его оставил. Протестировал работу php-скриптов. Открыл их на отдельных вкладках браузера. Запустил скрипт записи, передав ему произвольные переменные координат. Сразу после этого запустил скрипт считывания. Выводятся только что внесенные мной координаты. Могу повторять эту операцию сколько угодно раз. На уровне скриптов все работает как и должно. Зашел в игру и передвинул игрока в какие-либо координаты. Вновь запустил скрипт считывания, а он вернул мне те самые переменные которые были до того как я передвинул героя. Вновь пытаюсь записать данные в игру, обратившись отдельно к скрипту записи. Запись проходит успнешно. Запускаю скрипт считывания, а он опять возвращает уже не новые, а прежние координаты. Тоесть как только в записи данных поучаствывал флеш, скрипт считывания перестает работать. Делаю следующую операцию: просто обновляю страницу со скриптом считывания. После обновления он наконец возвращает нововнесенные координаты и начинает работать правильно. Сразу же после этого захожу в игру. Игрок становится в позиции соответствующую координатам, которые находятся в БД. Однако если передвинуть его, пролема повторяется в вновь, до тех пор пока я не запущу скрипт считывания на отдельной вкладке или если он уже открыт обновлю страницу. Надеюсь, я обьяснил все доходчиво Обьясните пожалуйста, почему происходит такая ошибка и как мне ее избежать. Заранее благодарен! |
|
|||||
|
а когда вы запускаете флешку - вы сразу присваиваете игроку координаты из БД?
У меня была проблема такого вида:Есть флешка подгруженная в другую флешку. если я изменяю в процессе игры статическую переменную класса и потом перезапускаю флешку то она перезапускается уже с измененной статической переменной. Но чувствую это не ваш случай...
__________________
: M F N W : |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 5
|
Мне уже на другом форуме обьяснили в чем ошибка. Если кому-то интересно, то тут проблема в кеше. Чтоб избежать ее, необходимо все время передавать пхп-скрипту разные запросы, тоесть отправлять ему еще одну (или больше) случайно генерируемую переменную (например random (999).
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 76
|
Вероятность повторения есть + всё равно кеширует.
Я лечу: |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
чтобы вероятности не было используйте метод getTime() класса Date
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Игры реального времени не делают на http-запросах.
Ошибка изначально в подходе к реализации, а подобные проблемы — результат этой ошибки. |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
для рил-тайм надо использовать к примеру tcp/ip протокол, а также сокет сервер
|
|
|||||
|
Banned
Регистрация: Oct 2007
Сообщений: 269
|
> Я лечу
Только в том случае, если по пути нету прокси, которые игнорируют заголовки. Специально писал такую. Кроме того, будет интересный эффект, если у юзверя на машише 1997 год ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|