Самый эффективный способ найти несколько целей для нескольких целей? 2D MMORPG на основе сетки ⇐ C#
Самый эффективный способ найти несколько целей для нескольких целей? 2D MMORPG на основе сетки
В настоящее время я пытаюсь решить будущую «проблему» поиска целей в онлайн-игре, которую сейчас разрабатываю. Это очень простая 2D MMORPG, которую я разрабатывал в качестве хобби в течение последних нескольких лет, используя C#.
Это на 2D-карте, оси X и Y. Карта разделена на координаты одинакового размера, каждый объект занимает на карте 1 координату.
Теперь эти карты различаются по размеру: от 1000x1000 до 300x300. Каждый из них содержит разное количество неигровых объектов (врагов). Все это вычисляется на стороне сервера, поэтому эффективность имеет решающее значение.
В настоящее время эти враги не нацелены друг на друга, они нацелены только на персонажей, управляемых игроком. Так что это относительно просто: когда игрок присоединяется к карте, добавляется в список, на который можно нацеливаться, каждый враг просматривает список и проверяет, находятся ли они в пределах досягаемости или нет, 20-30 игроков на карту не проблема.
Я хочу добавить больше интерактивного ИИ и позволить неигровым объектам карты нацеливаться друг на друга и, по сути, сражаться между собой в зависимости от определенного набора условий.
В настоящее время я делаю это с помощью цикла for: у каждого врага есть установленный «диапазон обзора», и поэтому он эффективно просматривает окружающие координаты, проверяя, есть ли в каждой ячейке объект, на который он может нацелиться.
Среднее количество объектов карты на карте составляет около 300, а средний диапазон просмотра составляет около 8. Таким образом, каждый цикл процесса требует около 20 тысяч итераций поиска цели на карте, в настоящее время в игре около 200 карт. на данный момент получается около 4-5 миллионов координат, просматриваемых за каждый цикл процесса.
Может ли кто-нибудь предложить более эффективный способ целевого поиска? На данный момент это не влияет на производительность, но я знаю, что это не будет хорошо масштабироваться. Я рассмотрел деревья четырехугольников, но уже разделил карту на координаты, что является частью основ игры. Я не знал, есть ли у кого-нибудь более простой метод поиска?
Спасибо
Как и выше, в настоящее время я использую цикл for для каждого объекта карты для поиска в окружающей области.
for (int d = 0; d
В настоящее время я пытаюсь решить будущую «проблему» поиска целей в онлайн-игре, которую сейчас разрабатываю. Это очень простая 2D MMORPG, которую я разрабатывал в качестве хобби в течение последних нескольких лет, используя C#.
Это на 2D-карте, оси X и Y. Карта разделена на координаты одинакового размера, каждый объект занимает на карте 1 координату.
Теперь эти карты различаются по размеру: от 1000x1000 до 300x300. Каждый из них содержит разное количество неигровых объектов (врагов). Все это вычисляется на стороне сервера, поэтому эффективность имеет решающее значение.
В настоящее время эти враги не нацелены друг на друга, они нацелены только на персонажей, управляемых игроком. Так что это относительно просто: когда игрок присоединяется к карте, добавляется в список, на который можно нацеливаться, каждый враг просматривает список и проверяет, находятся ли они в пределах досягаемости или нет, 20-30 игроков на карту не проблема.
Я хочу добавить больше интерактивного ИИ и позволить неигровым объектам карты нацеливаться друг на друга и, по сути, сражаться между собой в зависимости от определенного набора условий.
В настоящее время я делаю это с помощью цикла for: у каждого врага есть установленный «диапазон обзора», и поэтому он эффективно просматривает окружающие координаты, проверяя, есть ли в каждой ячейке объект, на который он может нацелиться.
Среднее количество объектов карты на карте составляет около 300, а средний диапазон просмотра составляет около 8. Таким образом, каждый цикл процесса требует около 20 тысяч итераций поиска цели на карте, в настоящее время в игре около 200 карт. на данный момент получается около 4-5 миллионов координат, просматриваемых за каждый цикл процесса.
Может ли кто-нибудь предложить более эффективный способ целевого поиска? На данный момент это не влияет на производительность, но я знаю, что это не будет хорошо масштабироваться. Я рассмотрел деревья четырехугольников, но уже разделил карту на координаты, что является частью основ игры. Я не знал, есть ли у кого-нибудь более простой метод поиска?
Спасибо
Как и выше, в настоящее время я использую цикл for для каждого объекта карты для поиска в окружающей области.
for (int d = 0; d
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение