Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.02.2008, 19:16
xAnthony вне форума Посмотреть профиль Отправить личное сообщение для xAnthony Найти все сообщения от xAnthony
  № 1  
Ответить с цитированием
xAnthony

Регистрация: Feb 2008
Сообщений: 5
Question Проблема взаимодействия Flash и MySQl

Разрабатываю онлайн игру во Flash. Действия в игре проходят в реальном времени. Игра работает по принципу постоянного обмена данными между флешем и базой данных MySQL. Запись и загрузка данных в БД обеспечивается отдельными php-скриптами.
Герой бегает по полю, а его координаты постоянно сохраняются в БД. Если перезапустить игру и снова зайти в нее, его координаты должны считаться из БД и герой должен оказаться на том же месте, при котором он был когда вышел из игры.
Сначала все идет нормально. Когда игрок бегает по полю, координаты успешно сохраняются в БД. Но когда я перезапускаю страницу и вновь захожу в игру, то герой почему-то оказывается на той позиции на которой был и при предыдущем входе в игру.
Допустим по умолчанию герой находится в координатах 100;100. Я перевожу его в координаты 200;100. Проверив БД я могу убедится что в ней сохранились координаты 200;100.
Но когда я перезапускаю страницу и вновь захожу в игру, игрок снова стоит в координатах 100;100. Перевожу героя в другие координаты, выхожу, захожу опять, а герой снова стоит в координатах 100;100. Однако если повторно зайти в игру через некоторое время (например через 10 минут), то координаты считаются из БД успешно и герой станет в позиции, где я его оставил.

Протестировал работу php-скриптов. Открыл их на отдельных вкладках браузера. Запустил скрипт записи, передав ему произвольные переменные координат. Сразу после этого запустил скрипт считывания. Выводятся только что внесенные мной координаты. Могу повторять эту операцию сколько угодно раз. На уровне скриптов все работает как и должно. Зашел в игру и передвинул игрока в какие-либо координаты. Вновь запустил скрипт считывания, а он вернул мне те самые переменные которые были до того как я передвинул героя.
Вновь пытаюсь записать данные в игру, обратившись отдельно к скрипту записи. Запись проходит успнешно. Запускаю скрипт считывания, а он опять возвращает уже не новые, а прежние координаты. Тоесть как только в записи данных поучаствывал флеш, скрипт считывания перестает работать.
Делаю следующую операцию: просто обновляю страницу со скриптом считывания. После обновления он наконец возвращает нововнесенные координаты и начинает работать правильно. Сразу же после этого захожу в игру. Игрок становится в позиции соответствующую координатам, которые находятся в БД. Однако если передвинуть его, пролема повторяется в вновь, до тех пор пока я не запущу скрипт считывания на отдельной вкладке или если он уже открыт обновлю страницу.

Надеюсь, я обьяснил все доходчиво
Обьясните пожалуйста, почему происходит такая ошибка и как мне ее избежать. Заранее благодарен!

Старый 01.02.2008, 20:40
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 2  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
а когда вы запускаете флешку - вы сразу присваиваете игроку координаты из БД?

У меня была проблема такого вида:Есть флешка подгруженная в другую флешку. если я изменяю в процессе игры статическую переменную класса и потом перезапускаю флешку то она перезапускается уже с измененной статической переменной.

Но чувствую это не ваш случай...
__________________
: M F N W :

Старый 01.02.2008, 21:42
xAnthony вне форума Посмотреть профиль Отправить личное сообщение для xAnthony Найти все сообщения от xAnthony
  № 3  
Ответить с цитированием
xAnthony

Регистрация: Feb 2008
Сообщений: 5
Мне уже на другом форуме обьяснили в чем ошибка. Если кому-то интересно, то тут проблема в кеше. Чтоб избежать ее, необходимо все время передавать пхп-скрипту разные запросы, тоесть отправлять ему еще одну (или больше) случайно генерируемую переменную (например random (999).

Старый 02.02.2008, 13:08
NikR вне форума Посмотреть профиль Отправить личное сообщение для NikR Найти все сообщения от NikR
  № 4  
Ответить с цитированием
NikR

Регистрация: Nov 2006
Сообщений: 76
Вероятность повторения есть + всё равно кеширует.
Я лечу:
Код:
  header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
  header('Cache-Control: no-store, no-cache, must-revalidate'); 
  header('Cache-Control: post-check=0, pre-check=0', FALSE); 
  header('Pragma: no-cache');

Старый 02.02.2008, 13:23
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 5  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
чтобы вероятности не было используйте метод getTime() класса Date
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 02.02.2008, 14:19
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Игры реального времени не делают на http-запросах.
Ошибка изначально в подходе к реализации, а подобные проблемы — результат этой ошибки.

Старый 02.02.2008, 14:39
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 7  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
для рил-тайм надо использовать к примеру tcp/ip протокол, а также сокет сервер
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 02.02.2008, 16:27
LinuxVideo вне форума Посмотреть профиль Найти все сообщения от LinuxVideo
  № 8  
Ответить с цитированием
LinuxVideo
Banned

Регистрация: Oct 2007
Сообщений: 269
> Я лечу

Только в том случае, если по пути нету прокси, которые игнорируют заголовки. Специально писал такую.
Кроме того, будет интересный эффект, если у юзверя на машише 1997 год

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:16.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.