В 2D-игре на основе плитки, как NPC и плитки ссылаются друг на друга?

Я делаю мозаичный движок для 2D-игр сверху вниз. В основном мир состоит из сетки плиток.

Теперь я хочу добавить, например, NPC, которые могут перемещаться по карте.

Как вы думаете, что лучше:

  1. Каждая плитка имеет указатель на NPC, который находится на его фрагменте, или указатель NULL
  2. , имеющий список NPC, и они имеют координаты плитки, в которой они находятся.
  3. что-то еще?

Я думаю,

  1. быстрее для обнаружения столкновений, но он будет использовать гораздо больше пространства памяти, и медленнее найти всех NPC на карте.
  2. - противоположное.
9 голосов | спросил lezebulon 12 62011vEurope/Moscow11bEurope/MoscowSat, 12 Nov 2011 23:47:40 +0400 2011, 23:47:40

2 ответа


12

Почему бы и нет? Бывают случаи, когда вы захотите посмотреть, есть ли какой-либо NPC на определенной плите (например, для обнаружения столкновений, как вы упомянули), и в другие моменты, когда вы захотите перебрать все NPC в мире ( например, для запуска их методов ИИ в каждом кадре).

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

ответил Nathan Reed 13 72011vEurope/Moscow11bEurope/MoscowSun, 13 Nov 2011 00:05:41 +0400 2011, 00:05:41
0

Как вы обрабатываете столкновения с картой? Если у вас есть уровень столкновения, очень простой способ состоит в том, чтобы сначала создать список NPC с координатами, указывающими, на какой плите они находятся, а затем итерировать через этот список и маркировать плиту уровня столкновения под NPC как столкновение. Таким образом, столкновения с NPC будут обрабатываться одновременно с остальной частью карты. То есть, конечно, если NPC не двигаются ...

ответил Joona 13 72011vEurope/Moscow11bEurope/MoscowSun, 13 Nov 2011 00:06:21 +0400 2011, 00:06:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132