最近我一直在尝试用 C# 编写游戏。我没有为此使用 XNA,因为我认为如果我从头开始编写游戏代码(尽管我使用的是多媒体引擎),我会学到更多。
我正在尝试设计一个 2D RPG 游戏——我知道有点野心勃勃,但是我至少对游戏的基本部分(即“样板”代码)有相当好的理解,而且我已经达到了一部分我不知道从这里去哪里。
在 2D 游戏中,您通过在不同的“区域”中走动来完成游戏。一旦你击中了一个“门户瓷砖”,你就会被运送到下一个区域等。
我无法理解如何设置这些区域对象。这是我的第一个想法:每个区域都有几个不同的集合结构(例如,可见性四叉树、碰撞四叉树、AI 实体列表等)。因此,如果我要在游戏中添加一个敌方实体,它将被放入可见性四叉树、碰撞四叉树(因为您可以与实体发生碰撞)和 AI 实体列表中。当该区域收到更新请求时,它会告诉这些结构中的每一个进行自我更新,这反过来又告诉实体进行自我更新。一切都很好,到目前为止。
我的问题是:如果这个敌人需要与其他物体交流怎么办?例如,它可能需要知道玩家是否在它的某个范围内。或者它是否被玩家击中。或者所有可碰撞对象都在该区域中的位置(因此它可以寻路)。
这个问题的第一个(也是不好的)解决方案是简单地向每个实体传递对每个集合的引用。但这显然鼓励了紧密耦合的对象,这是不好的。
我想出的第二个解决方案是让每个实体都能够通过消息结构查询该区域。因此,敌人可以说“给我一个在我位置 X 距离内的每个实体的列表”并且该区域会返回答案。但是,这将变得越来越困难,因为我必须在该区域中编写越来越多的可能性(“给我一个不在我 X 距离内的实体的列表”,“给我一个健康状况低于X”等)。
我正在寻找的是一个经过时间考验的解决这个对象间通信问题的解决方案,基本上是如何建立一个区域。我想它也需要某种消息传递系统,尽管我不确定。
谢谢阅读。