小编Maj*_*mic的帖子

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

首先,让我为提出一个看起来有点模糊(或形式不正确)的问题而道歉,但我没有经验可以提出更具体的问题.

我正在构建一个引擎,用于在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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

specialObject.Click += new onAction(SpecialMethod);
Run Code Online (Sandbox Code Playgroud)

但这也是事情变得复杂的地方.我希望我的引擎能够简单地通过加载不同的数据来播放不同的游戏,而无需更改引擎本身,因此在引擎内部的某处硬编码SpecialMethod不是一个选项,它必须是数据的一部分.对于普通对象,它都可以用(反)序列化来完成,但从我读过的内容来看,这对代表来说是个问题.你能建议一种方法吗?

PS:由于我仍然处于概念层面并且上面的代码尚未实现,因此您可以自由地建议您找到的最佳解决方案,即使是完全避免代理的解决方案.

c#

5
推荐指数
1
解决办法
633
查看次数

标签 统计

c# ×1