Добавление функциональности в систему сущностей / компонентов - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь написать свою собственную систему сущностей / компонентов с нуля на 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 или KeyReleased было запущено, и только контроллеры с определенным связанным ключом (ами) отвечали на событие и выполняли связанные с ними методы.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

После этого вы изменили X и Y координаты Entity, используя определенный компонент, вы просто перерисовываете сцену, и Entity появится в новой позиции. Где на самом деле проблема.

У вас есть Entity, который может быть преобразован любым возможным способом с (скажем) PositionComponent, RotationComponent, ScalComponent, TextureComponent и так далее, но у вас есть простой метод Redraw(), который отображает все Entites на сцене в видимом фруструме в текущем состоянии каждого.

0 голосов
/ 23 февраля 2012

Как насчет дерева типов, ориентированного на эти высокоуровневые поведения? То есть класс Jump, учитывая объект, знает, как заставить его прыгать.Прыжок может быть получен из Move, если есть достаточная общность и т. Д. Тогда более сложные поведения будут состоять из более простых поведений иерархически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...