我正在開發視頻遊戲,我希望它是高度可修改的。目前,我所有的遊戲邏輯都是用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而不是類屬性來做這件事?類屬性不會太冗長,更易於閱讀。至少我這麼認爲。 –