gpt4 book ai didi

2D 游戏中对象的 C# 结构

转载 作者:太空狗 更新时间:2023-10-29 23:17:47 25 4
gpt4 key购买 nike

首先,让我为提出一个可能看起来有点模糊(或形式化严重)的问题而道歉,但我缺乏提出更具体问题的经验。

我正在用 C# 构建一个用于玩 2D 冒险游戏的引擎(你点击一个对象然后发生某些事情的类型),我正在考虑它的最佳结构。正如您所想象的,当您与一个对象交互时会发生不同的事情:如果它是一扇门,您希望进入另一个房间,如果它是一个人,您希望开始与他们交谈,等等。我的想法是实现这种行为与代表,像这样:

public abstract class GameObject {
public delegate void onAction();
public onAction Click;
}

public class Door : GameObject {
public Door() {
Click = new onAction(ChangeRoom);
}
private void ChangeRoom() {
//code to change room here
}
}

public class Person : GameObject {
public Person() {
Click = new onAction(StartTalking);
}
private void StartTalking() {
//code to display dialogue here
}
}

我发现这个解决方案非常优雅,因为如果我想创建一个特殊的对象,其某些行为不在其类中,我可以简单地这样做:

specialObject.Click += new onAction(SpecialMethod);

但这也是事情变得复杂的地方。我希望我的引擎能够通过加载不同的数据来玩不同的游戏,而无需更改引擎本身,因此在引擎内部某处硬编码 SpecialMethod 不是一种选择,它必须是数据的一部分。对于普通对象,它都可以通过(反)序列化来完成,但据我所知,这对委托(delegate)来说是有问题的。你能推荐一种方法吗?

P.S.:由于我仍处于概念层面,上面的代码尚未实现,您可以自由提出您认为最好的任何解决方案,即使是完全避免委托(delegate)的解决方案。

最佳答案

您需要的是脚本

本质上,脚本是一种外部资源(即外部文件),其中包含描述操作的源代码。

C# 对此有不同的选择。

您可以从 .NET 语言发出程序集。或者您可以集成另一种语言(例如 python)并在运行时执行脚本。本质上,脚本是在正确的时间加载、解释或编译并执行的。如果脚本能够修改应用程序状态(数据结构),您可以使用外部数据定义对象行为(数据驱动开发)。

关于这个问题有很多文献,但我觉得建议GPU Programming Gems 6 (第 4 节)。然而,集成一个优秀的脚本引擎需要付出的努力是非常多的。这样我就试图找出一个基于 XML 文件的简单逻辑(here 是我的问题,加入另一个 question 来定义 XML 内容);遗憾的是,我发现这几乎取决于您需要的灵 active 。

关于2D 游戏中对象的 C# 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7517919/

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