在基于二维图块的游戏中,NPC和图块应如何相互引用?


9

我正在为自上而下的2D游戏制作图块引擎。基本上,世界是由瓷砖网格组成的。

现在,我想例如放置可以在地图上移动的NPC。

您认为最好的是:

  1. 每个图块都有一个指向其图块上的NPC的指针或NULL指针
  2. 有一个NPC列表,并且它们具有它们所在的图块的坐标。
  3. 还有什么吗

我认为

  1. 碰撞检测速度更快,但会占用更多的内存空间,并且在地图中查找所有NPC的速度也较慢。
  2. 相反。

Answers:


11

为什么不同时?有时候,您希望查看特定图块上是否有任何NPC(例如您提到的用于碰撞检测),而有时候,您想要遍历世界上所有的NPC(例如用于每帧运行其AI方法)。

除非您在内存受限的平台上工作,或者您有一个非常大的映射,否则每个瓦片的指针不会占用太多内存。


5
+1我倾向于同意这一点,但是@lezebulon,我建议您封装所有需要尽早更新两者的逻辑。也就是说,当玩家离开图块时,应该有一个原子操作(函数调用)同时删除两个指针,即玩家对瓷砖和瓦片对玩家。与玩家到达图块时相同,将两个指针分配在一起。这样可以为您节省一些潜在的混乱,即引用彼此不一致,即,一种引用存在而另一种引用不一致。
工程师

0

您如何处理与地图的碰撞?如果您有一个碰撞层,一种非常简单的方法是首先创建一个NPC列表,其坐标指示它们在哪个图块上,然后迭代该列表并将NPC下的碰撞层图块标记为碰撞图块。这样,与NPC的冲突将与地图其余部分同时处理。那当然是如果NPC不动...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.