我正试图在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看起来真的很愚蠢,就是传递方法参数的人。 理想情况下,我希望触发KeyDown,KeyHeld或KeyReleased事件,只有具有特定键的控制器响应事件并执行其关联的方法。
答案 0 :(得分:2)
之后,您使用特定组件更改了X
和Y
坐标Entity
,您只需重新绘制场景,Entity
将出现在新位置。实际上问题在哪里。 ?
您有Entity
以任何可能的方式转换为(例如)PositionComponent
,RotationComponent
,ScalComponent
,TextureComponent
等等,但是有一个简单的Redraw()
方法,可以在每个场景的当前状态下呈现场景中的所有Entites
。
答案 1 :(得分:0)
关于这些高级行为的类型树怎么样?:即给定一个对象,Jump类会知道如何使它跳转。如果存在足够的共性,则可以从Move派生跳转等。然后,更复杂的行为将由更简单的行为组成。