我正在开发视频游戏,我希望它是高度可修改的。目前,我所有的游戏逻辑都是用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
—为(在Python有点像的对象)的属性的识别符。当我们定义行为时会很有用。Class
—该属性的Python类。Field
—该属性的一个字段。Field.Name
—必须与Python字段('self.health'→'health')相同。Field.Value
—该字段的值。
定义行为
正如我前面所说,行为与实体的属性进行交互。例如,损坏以下行为需要了解的关于的生命属性。
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
— Python类的行为;Attribute.Field
—的行为,其中参考属性将被放置Attribute.Link
—什么属性链接到的领域。必须是名称上面定义的属性的标签中的值之一。
我不太明白你的问题。你想从XML定义创建Python代码吗?如果不是,那么用于XML代码的是什么? – Nikratio
@Nikratio我只想知道这种定义实体的方式是否足够清晰,但是如果您认为它过于冗长或者过于冗长。 –
你为什么要用XML而不是类属性来做这件事?类属性不会太冗长,更易于阅读。至少我这么认为。 –