Я занимаюсь разработкой видеоигры, и мне бы хотелось, чтобы она была очень изменяемой. В настоящее время вся моя игровая логика определена в Python, моя логика движка в C ++, а мои данные в XML. Я хотел бы объяснить вам, как сущность определяется в моей игре, и послушать, что вы думаете; например, это слишком многословно?
Сначала немного фона:
- Сущности состоят из компонентов (модель сущностей на основе компонентов).
- Компоненты могут быть двух типов: атрибуты и поведения.
- Атрибуты являются просто «тупыми» данными. Это такие вещи, как здоровье, скорость и т. Д.
- Поведения определяют, как сущность взаимодействует со своими Атрибутами, миром, другими сущностями.
Определение атрибута
Я пройдусь по этой части за частью. Сначала я объясню, как определить атрибут. В Python и атрибут может выглядеть примерно так:
class Life(Attribute):
def __init__(self):
# Default values
self.health = 100
self.toxicity = 0
Довольно простой. Теперь в XML-файле каждому полю в Атрибуте может быть присвоено различное значение для каждой определяемой нами сущности:
<Attribute>
<Name>life</Name>
<Class>hero.attributes.Life</Class>
<Field>
<Name>health</Name>
<Value>100</Value>
</Field>
<Field>
<Name>toxicity</Name>
<Value>78</Value>
</Field>
</Attribute>
Name
& mdash; идентификатор для атрибута (вроде как объекты в Python). Будет полезно, когда мы определим поведение.
Class
& mdash; класс Python этого атрибута.
Field
& mdash; поле атрибута.
Field.Name
& mdash; должно быть таким же, как поле Python («self.health» & rarr; «health»).
Field.Value
& mdash; значение этого поля.
Определение поведения
Как я уже говорил ранее, Поведения взаимодействуют с Атрибутами сущности. Например, приведенное ниже поведение Damage должно знать об атрибуте Life .
class Damage(Behavior):
def __init__(self):
self.life = None
Код XML для настройки поведения похож на код атрибута, но не идентичен:
<Behavior>
<Class>hero.behaviors.Damage</Class>
<Attribute>
<Field>life</Field>
<Link>life</Link>
</Attribute>
</Behavior>
Class
& mdash; Класс поведения Python;
Attribute.Field
& mdash; поле Поведения, где должна быть размещена ссылка на Атрибут
Attribute.Link
& mdash; на какой атрибут ссылаться. Должно быть одним из значений в тегах Name атрибутов, определенных выше.