Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 07:16   #1151
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Только на одном пути нас поджидает по дороге монстр, а на другом аномалии никого поблизости нет. Результат будет сильно различаться, ведь перемещение происходит не мгновенно, и за время пути может подрасти собачка, выбежать навстречу монстр, или еще что произойти. Даже если в начальный момент времени оба пути идентичны, в середине на одном из них может среспауниться моб, и тогда уже будет важно, в какую именно щель попал электрон.
Во-первых, монстр - это тоже препятствие, поэтому путь через монстра будет длинее и алгоритм направит его в другую сторону.
Во-вторых, с аномалией или другими труднопроходимыми ячейками тоже самое, только замените алгоритм с A* на D*.
В-третьих, это не реалтайм и здесь тира не устроишь.
Виталий Желтяков вне форума Ответить с цитированием
Старый 22.05.2012, 10:23   #1152
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Во-первых, монстр - это тоже препятствие, поэтому путь через монстра будет длинее и алгоритм направит его в другую сторону.
Так монстр и необязательно стоит прямо на пути. Он может стоять где-то в сторонке, благо у него должен быть агрорадиус, и персонажу достаточно будет пройти мимо. А даже если учитывать наличие монстров рядом, то все равно остается возможность того, что на одном из путей среспаунится монстр, чего клиент знать вообще не может.

Или еще лучше - у нас возможно PvP, персонаж1 куда-то пошел по одному из двух путей, и пока он шел, один из них пересек тоже пришедший откуда-то персонаж2 с агрессивными намерениями (у которого тоже, например, два пути) и стукнул персонажа1 по голове. А тот шел в святой уверенности, что поблизости вообще никого нет.

Цитата:
В-третьих, это не реалтайм и здесь тира не устроишь.
Отчасти тут все-таки вполне себе риалтайм - находясь у одного конца экрана (к примеру, у края карты) и кликнув по противоположному, вы будете идти туда достаточно долго, чтобы вокруг успело произойти множество интересных вещей. К примеру, на одном из них успел объявиться монстр - и этот путь внезапно стал длиннее (да еще и опаснее), волновая функция сколлапсировала, и пользователь будет недоумевать - я же уже должен был прийти, почему меня еще тут нет, и кто мне успел отгрызть две ноги?

Ну или на одном из путей засел PvP-противник в инвизе (информация, которую ни в коем случае не должен знать клиент).

В общем, ситуаций, в которой два пути, которые алгоритм примет одинаковыми по длине, могут оказаться существенно различными, придумать можно множество.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 22.05.2012, 14:55   #1153
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

И что что обстановка меняется? Команды на выполнение остаются прежними. Чтобы их изменить нужно заново пересчитать матрицу пути.

Если беспокоят коллизии, то достаточно их обрабатывать на клиенте, но не как не обрабатывать каждый шаг на сервере. Вы только прикиньте во сколько возрастает нагрузка при расчёте каждого шага - она возрастёт ровно на количество шагов до конечной точки.
Виталий Желтяков вне форума Ответить с цитированием
Старый 22.05.2012, 15:29   #1154
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Я понял почему Вы меня не понимаете - у Вас неверное представление о цели действия в пошаговом сценарии.
Вы считаете, что должна быть возможность применять действие к пустому месту. Типо, атака по пустой ячейке, где в следующий ход должен появиться противник.
Это изначально не верная логика. Действие (не перемещение) должно применяться не к ячейке, а к объекту. То есть игрок должен атаковать противника, а не ячейку. Не надо заранее рассчитывать будет ли игрок в этой ячейке через определённое количество ходов. Нужно просто обработать коллизию, проверить возможность текущего положения и получить возможность выполнения действия. Всё...
Виталий Желтяков вне форума Ответить с цитированием
Старый 22.05.2012, 15:43   #1155
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

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

Волновой алгоритм поиска пути я отметаю сразу. Причина простая. Клеток на карте много, в ММO одновременно может перемещаться и менять точку перехода 10, 20, 30 тыс. человек, не считая мобов, ...сервер просто ляжет под такой нагрузкой. Решение очень простое - переложить волновой алгоритм в мозг пользователя, пусть сам думает куда идет. Я ни разу не видел человека на улице, который бы тупо шел в стену и ждал пока его кто-нибудь направит в обход, ...он это делает сам, вот и пусть кликает по проходам. А с мобами решается очень просто, простейшая система обхода небольшого препятствия по двум сторонам. Мы это уже обсуждали на страницах этого раздела, и весьма успешно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 22.05.2012, 18:12   #1156
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Виталик, ты ошибаешься, у меня нет никаких построений и уравнений.
А как сервер узнаёт куда двигаться? В каком направлении?
Цитата:
в ММO одновременно может перемещаться и менять точку перехода 10, 20, 30 тыс. человек
??? Вы думаете что это нереально? Ни один нормальный сервер не выдержит более 1,5 тыс. соединений одновременно даже с минимальными нагрузками.
Цитата:
Клеток на карте много
Достаточно производить расчёт только для области видимости. У Вас там 300-500 ячеек, которые можно с лёгкостью пропустить через волновой алгоритм.
Цитата:
Решение очень простое - переложить волновой алгоритм в мозг пользователя, пусть сам думает куда идет. Я ни разу не видел человека на улице, который бы тупо шел в стену и ждал пока его кто-нибудь направит в обход, ...он это делает сам, вот и пусть кликает по проходам.
Не удобно, вызывает затруднения в игре.

К тому же мы пока говорили только о перемещении, а как Вы собираетесь реализовывать дальние атаки (стрелковое оружие)? Если более конкретно, то как будет рассчитываться вероятность попадания на малых углах при наличии препятствий?
Виталий Желтяков вне форума Ответить с цитированием
Старый 22.05.2012, 21:12   #1157
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Виталий Желтяков, кажется, мы действительно друг друга не понимаем, хотя я по-прежнему не понял вашу точку зрения. Так что постараюсь объяснить свою.

Итак, пользователь ткнул мышкой по точке на карте, скомандовав: "Иди сюда". Для примера рассмотрим шахматную доску (та же система ячеек, что и в рассматриваемой игре). Герой стоит на А1, пользователь щелкнул на H8.
Клиент, зная всю местность, рассчитал путь: сначала на А2, потом на B2, потом на B3, потом на C3...
Теперь он посылает серверу сигнал: иду на А2. Тот сделал элементарную проверку: "Ага, ты находишься на А1, эта А2 соседняя и не занятая, можешь идти. Пришел."
Клиент получает от сервера сообщение, что он теперь на А2, понимает, что по маршруту следующая B2 и говорит серверу: "Теперь я иду на B2". Тот снова делает элементарную проверку и дает добро. И так далее пока не дойдет, пользователь не передумает или еще что-то не произойдет, что маршрут придется пересчитать.

Почему необходимо согласовывать с сервером каждый шаг? Варианта два - клиент может случайно ошибиться, или же это может быть чит.
К примеру, находясь на А1, он (ошибочно или злонамеренно) может сказать серверу: "Перемещаюсь на H8". А тот ему: "Куда?! У нас по правилам можно только на соседнюю клетку за один раз перемещаться. Ну-ка стой где стоял! Или давай шагай по-честному."
Таким образом, исключается случайная или читерская мгновенная телепортация через полкарты.

Теперь по поводу того, кто должен считать маршрут - пользователь или сервер. Самый рациональный ответ: никто из них. Заниматься этим должен клиент и только клиент. Сервер загнется считать по волновому алгоритму пути для сотен и тысяч пользователей, в то же время он может гораздо с меньшими затратами проверять, перемещается ли каждый на соседнюю к нему свободную клетку, или его нужно завернуть с пути. А пользователю таким извращением, как ходьба только по отрезкам заниматься и вовсе не захочется. Сейчас, насколько мне известно, нет ни одной (если не считать кустарных поделок) игры, в которой юниты/персонажи по щелчку мыши (для перемещения) шли бы тупо по прямой и упирались в стенку. Везде используется хотя бы элементарный поиск пути. Если вам по дороге попадется маааленький пенек шириной в одну клетку, и ваш герой в него врежется и дальше не пойдет, вы проклянете разработчика игры и больше никогда с таким извращением дела иметь не будете.
Извините за экспрессию, но пользователь сейчас балованный пошел и совершенно точно будет рассуждать именно в этом ключе. Делать игру без поиска пути - почти то же самое, что и игру с прокруткой по целому экрану.

Если есть какие-то вопросы с туманом войны и рассчетом для клиента, то можно только двигаться к точке из открытого пространстов, ближайшей к указанной точке перемещения (точно так же, как делается, когда перемещение в какую-то точку на экране невозможно - нет прохода/спуска и т.д.), и по мере открытия новой области можно пересчитывать. Впрочем, это уже детали.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 22.05.2012, 22:22   #1158
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Как Вы предлагаете организовывать перемещение, Я понял сразу. Это глупо и ресурсоёмко и имеет проблемы в перспективе.
Цитата:
Теперь по поводу того, кто должен считать маршрут - пользователь или сервер. Самый рациональный ответ: никто из них. Заниматься этим должен клиент и только клиент.
Клиент должен построить маршрут, проверить его возможность прохождения и отправить запрос о перемещении на сервер. Сервер должен только проверить возможность маршрута и подтвердить перемещение.
Коллизии обрабатываться по мере их возникновения по запросу с клиента. Всё равно без команды пользователя их не обработать. Организуется это при помощи пары триггеров.

Сравним мой и ваш подход:
- При вашем подходе количество запросов равно количеству шагов, в моём количеству команд, т.е. одному запросу.
- При вашем подходе количество проверок доступности ячеек равно количеству шагов, в моём - количество_шагов*количество_рёбер.
- В вашем подходе каждый ход происходит пересчёт действий всех игроков, при моём только тех, которые начали или закончили ход.
- При моём подходе задержка на соединение будет только в начале перемещения (или конце), в вашем при каждом шаге.
- Ваш подход не решает проблему стрелкового оружия, мой - решает.

Я думаю достаточно. Если хотите возразить, то сначала прикиньте, что быстрее: установка соединения и передача пакетов или же перебор 100-200 ячеек с проверкой на доступность.
Виталий Желтяков вне форума Ответить с цитированием
Старый 23.05.2012, 01:37   #1159
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение

??? Вы думаете что это нереально? Ни один нормальный сервер не выдержит более 1,5 тыс. соединений одновременно даже с минимальными нагрузками.
А тут вы ошибаетесь. 1.5 тыс соеденинений совсем не много
Alar вне форума Ответить с цитированием
Старый 23.05.2012, 05:26   #1160
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,266
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Решение очень простое - переложить волновой алгоритм в мозг пользователя, пусть сам думает куда идет. Я ни разу не видел человека на улице, который бы тупо шел в стену и ждал пока его кто-нибудь направит в обход, ...он это делает сам, вот и пусть кликает по проходам.
Это решение было бы хорошо для 3D игры с возможностью вида от третьего лица и элементарным управлением WASD, но не для 2D MMORPG. В таких играх считаю что должен присутствовать алгоритм обхода препятствий и анализа встречи с врагом при обходе, пусть даже элементарный. Пример можно посмотреть в тех же героях 3 или Disciples 2. И имея ввиду посмотреть, не надо смотреть и говорить что они пошаговые, путь рассчитывается моментально за доли секунд и красным выделяются когда столкновение с врагом. Думаю такой же алгоритм надо заложить в клиента, ведь у него будут все данные для расчета (знание видимой облости когда он перемещается: препятствия, враги). Главное в этом деле постоянное и актуальное обновление с сервером, и клиент после получения данных должен смотреть на свою построенную траекторию и анализировать появление врагов и препятствий, перестраивая маршрут для достижения цели.

Последний раз редактировалось Simply-Art; 23.05.2012 в 05:31.
Simply-Art вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание игр: Unity, OpenGL, DirectX 750 14.11.2017 20:26
Музыка программистов - как вы относитесь к АРИИ? Весёлый Жека Свободное общение 46 10.10.2008 22:32
Конкурсы по созданию игр на Delphi mutabor Свободное общение 0 15.06.2007 12:40
Работа по созданию ПО remix Фриланс 3 22.04.2007 11:00