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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Надеюсь автор топика не будет против если я со своим вопросом (по теме) вмешаюсь. Собственно ситуация та же - многопользовательская игрушка. Меня интересует способ реализации формирования запорсов.
Т.е. у нас н-е число переменных и соответствующих им значений. В каждый момент времени мы можем(должны) передавать серверу некоторый объем данных (т.е. значений переменных), который постоянно отличается - количественно и качественно. Каким образом проще будет формировать этот самый запрос? У меня есть желание вынести его формирование в отдельную функцию, куда бы я в качестве параметров передавал названия названия переменных (ИМХО звучит криво), которые бы считывались из некоего хранилища переменных и происходило бы формирование пары - переменная=значение, которая бы и скармливалась соккету. Понимаю что выглядит криво, но другие варианты мне почему-то кажутся не менее кривыми. Кто что подскажет по данной теме?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 05.05.2010, 00:46
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Если сервер согласен с клиентом, значит он тоже рассчитывает движение по графу.
По-моему, дешевле не становится
Это домашнее задание всем, кто дочитал до сих пор.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 05.05.2010, 01:01
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 3  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Зачем же сразу рассчитывать? Необходимо просто проверить валидность пути клиента, или же он пытается обмануть нас. А если уж он обходный путь вдруг придумал, его проблемы.

Старый 05.05.2010, 01:18
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 4  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Каким образом проще будет формировать этот самый запрос?
Для начала можно внести типизацию:
- тип сообщения 1) - пришли мне координаты
- тип сообщения 2) - пришли мне цвет волос Васи
- тип сообщения 3) - пришли мне ... еще что-то

Тип сообщения определяется его первым байтом. Например, для 1) пишем в сокет 0x01. Для 2) - 0x02 и тд. Далее это будем называть тэгом сообщения.

Дальше за типом сообщения идет дата отправки... или не идет, в зависимости от того, кто отправитель. Если это сообщение клиент -> сервер, то не пишем дату, если сервер -> клиент, то пишем.

Дальше идет длина сообщения в байтах (то есть длина того, что идет за датой или за тэгом - эту часть можно называть телом сообщения)

Дальше идут "кусочки" тела сообщения. Что это? По сути 2 составляющих -
1) тип данных (1 байт: 0x00 = String, 0x01 = int, 0x02 = Boolean и т.д.) Во многих случаях тип данных определяет длину кусочка (int всегда 4 байта, Boolean всегда 1 байт...), но иногда (например, Array)... читаем дальше =)
2) нам нужно записать длину кусочка в байтах (можно называть это телом кусочка, по аналогии с телом сообщения). Записывать можно по-разному - для Array можно записать число элементов и каждый элемент рассматривать отдельно (со своими типом и длиной), а можно указывать длину в байтах

Как все это парсить?
Код AS3:
switch(resievedData.readByte()) {
case 0x00: // координаты
this.parseCoords(resievedData.readBytes(resievedData.bytesAvailable));
break;
 
case 0x01: // цвет волос
this.parseHairColor(resievedData.readBytes(resievedData.bytesAvailable));
break;
}
 
// ... много кода
 
private function parseCoords(bytes:ByteArray) {
//... еще больше кода
}
UPD
Цитата:
еобходимо просто проверить валидность пути клиента
Для этого надо знать между какими пунктами находится клиент и между какими он должен находиться. Интересно, как сервер все это узнает, если не будет ничего рассчитывать?
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 05.05.2010 в 01:20.
Старый 05.05.2010, 01:49
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 5  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Книжку читаешь? А про поиск пути подумать не хочешь. Ты посылаешь серверу путь (он проверяет можешь ты туда идти или нет) и двигает тебя по этому пути.

Старый 05.05.2010, 02:02
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 6  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Я понимаю это все так:
К: хочу из А в Б через пункт Ц
С: не вопрос, поехали
К: я начал идти
С: (всем остальным) "Вася начал идти из А в Б через Ц со скоростью 3 км/ч в 17.36"
...
...
К: я закончил идти
С: (всем, включая Васю) Вася закончил идти в 17.39 в координатах x=122 y=534

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

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Я понимаю это все так:
К: хочу из А в Б через пункт Ц
С: не вопрос, поехали
К: я начал идти
С: (всем остальным) "Вася начал идти из А в Б через Ц со скоростью 3 км/ч в 17.36"
...
...
К: я закончил идти
С: (всем, включая Васю) Вася закончил идти в 17.39 в координатах x=122 y=534

Вопрос - зачем серверу иногда "поддакивать" клиенту? Расчет должен быть один раз по окончании "ходьбы".
В таком варианте вы замучаетесь с синхронизацией клиентов.
Должно быть так:

К: хочу из А в Б через пункт Ц
С: иди, вот тебе путь по точкам (либо путь приходит с клиента и валидируется) и вот тебе время, в которое ты должен быть в Ц
С: (всем остальным) "Вася пошел по таким-то точкам и прибудет в Ц тогда-то"

Старый 05.05.2010, 02:06
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 8  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
gloomyBrain, спасибо за развернутый ответ. Наверное это действительно самый правильный вариант.

А если Вася вдруг остановился? Где он будет между этими точками и не собьет ли его собой с пути Лиза?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 05.05.2010, 02:21
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 9  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Поиск пути это не три точки.

1) Клиент выбирает направление (ищет путь) состоящий например из 150 точек
2) Возможно Клиент при переходе из точки в точку просто спрашивает, могу ли я пройти в следующую клетку. Сервер отвечает, клиент запускает анимацию.

В твоём примере сервер умрёт. Представь, пользоватеель судорожно тыкает за 10 км каждую секунду, Сервер должен каждый раз вычислять пути и ставить его в нужную точку на 1/100 от того чем ты загрузил сервер.

На другом примере: тот же самый варкрафт 3 никогда не рассчитывает полные траектории юнитов. Там сложный алгоритм с разбиением на более крупные сектора с привязкой к карте путей, заранее просчитанной в редакторе карты.


Последний раз редактировалось Rzer; 05.05.2010 в 02:28.
Старый 05.05.2010, 02:53
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Клиент при переходе из точки в точку просто спрашивает, могу ли я пройти в следующую клетку
Согласен полностью

Цитата:
А если Вася вдруг остановился?
Тогда он отправляет сообщение на сервер, где высчитываются его текущие координаты (исходя из точки начала движения, скорости и пункта назначения или направления)

Цитата:
не собьет ли его собой с пути Лиза?
А вот фиг знает =)
Можно проверку на пересечения делать на каждом клиенте и на сервере одновременно.
На сервере проверка должна вызываться пореже, чем на клиентах.
Каждый клиент может (исходя из своих данных) сказать серверу, что он с кем-то пересекается, тогда сервер должен тут это же проверить (незапланированная проверка) и восстановить реальную картину мира.
А можно не проверять на сервере вообще - все-таки пересечения клиент-клиент не такая полезная штука в играх, где игроков на карте больше 10. Если их меньше 10 (ну или еще какого-то числа, но немного), то можно проверять только на сервере.
Все зависит от задачи
__________________
...вселенская грусть

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

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

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


 


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


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