gpt4 book ai didi

c# - 游戏架构 - 耦合还是不耦合?

转载 作者:可可西里 更新时间:2023-11-01 09:08:41 26 4
gpt4 key购买 nike

我正在构建一个简单的游戏,其中包含移动设备——游戏中的角色(生物)。每个生物都可以执行某些功能。为了向 Mob 提供该功能,我创建了一个 Behavior。

例如,假设一个生物需要在游戏区域中移动,我会给它 MoveBehavior - 这被添加到生物类的内部行为列表中:

// Defined in the Mob class
List<Behavior> behaviors;

// Later on, add behavior...
movingMob.addBehavior(new MovingBehavior());

我的问题是这样的。大多数行为都会操纵暴徒的某些事情。在 MoveBehavior 示例中,它将更改生物在世界中的 X、Y 位置。但是,每个行为都需要特定的信息,例如“movementRate”—— movementRate 应该存储在哪里?

是否应该存储在 Mob 类中?其他生物可能会尝试通过减慢/加速生物来与之交互,并且在生物级别更容易访问...但并非所有生物都有 movementRate,因此它会造成困惑。

还是应该存放在MoveBehavior类中?这将它隐藏起来,使其他生物更难与之互动 - 但它不会使具有额外和未使用属性的非移动生物变得杂乱无章(例如,一个不移动的塔永远不需要使用 movementRate)。

最佳答案

这是经典的“行为组合”问题。权衡是行为越独立,它们之间的交互就越困难。

从游戏编程的角度来看,最简单的解决方案是决定一组“核心”或“引擎”数据,并将其放入主对象中,然后让行为能够访问和修改该数据——可能通过功能接口(interface)。

如果您想要特定于行为的数据,那很好,但是为了避免变量名称中的冲突,您可能希望访问它的接口(interface)包含行为名称。喜欢:

obj.getBehaviorValue("movement", "speed")

obj.setBehaviorValue("movement", "speed", 4)

这样两个行为都可以定义自己的变量,称为速度,而不会发生冲突。这种类型的交叉行为 getter 和 setter 将允许在需要时进行通信。

我建议为此考虑使用脚本语言,如 Lua 或 Python。

关于c# - 游戏架构 - 耦合还是不耦合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1044998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com