向实体/组件系统添加功能

本文关键字:添加 功能 系统 组件 实体 | 更新日期: 2023-09-27 18:25:24

我正在尝试用 C# 从头开始编写自己的实体/组件系统,但我被困在在哪里/如何实现某些功能。

编辑:我想出了如何在哪里添加像Move((和Jump((这样的函数。

public static class Actions
{
    public static void MoveUp(EntityManager entityManager, int EGUID) {}
    public static void MoveDown(EntityManager entityManage, int EGUID {}
}

我可以将它们添加到集合中,如下所示:

KeyboardController kbController = entityManager.GetComponent<KeyboardController(1);
kbController.KeyBindings.Add(Keys.Right, new Dictionary<KeyStateES, Action<EntityManager, int>());
kbController.KeyBindings[Keys.Right].Add(KeyStateES.Held, Actions.MoveUp);

现在,我能够使用键绑定非常轻松地移动实体。但是,它仍然不是很理想,因为:

  • 我不能将多个方法绑定到一个密钥。
  • 我被迫在 InputManager 类中传递方法参数。

这是一个问题,因为有时我需要一个键来执行多个不相关的任务,并且因为我的 InputManager 是传递方法参数的人似乎真的很愚蠢。理想情况下,我希望它能够触发 KeyDown、KeyHeld 或 KeyRelease 事件,并且只有绑定了特定键的控制器响应该事件并执行其关联的方法。

向实体/组件系统添加功能

之后,

您使用特定组件更改了XY Entity坐标,只需重绘场景,Entity将出现在新位置。 问题到底出在哪里。?

你有一个Entity,它以任何可能的方式进行转换,包括(比如(PositionComponentRotationComponentScalComponentTextureComponent等,但有简单的Redraw()方法,在每个Entites当前状态下以可见的视锥体渲染场景中的所有。

一个专注于这些高级行为的类型树怎么样?:即 Jump 类在给定一个对象的情况下知道如何让它跳转。 如果有足够的共性等,跳转可能会从 Move 派生出来。 然后,更复杂的行为将由分层的更简单行为组成。