1

私はビデオ ゲームを開発していますが、高度に変更可能にしたいと考えています。現在、すべてのゲーム ロジックは Python で、エンジン ロジックは C++ で、データは XML で定義されています。私のゲームでエンティティがどのように定義されているかを説明し、あなたの意見を聞きたいと思います。たとえば、冗長すぎませんか。

まず、いくつかの背景:

  • エンティティはコンポーネントから作成されます (コンポーネント ベースのエンティティ モデル)。
  • コンポーネントには、属性と動作の 2 つのタイプがあります。
  • 属性は単なる「ダム」データです。それらは、健康、速度などです。
  • 動作は、エンティティがその属性、世界、他のエンティティとどのように相互作用するかを定義します。

属性の定義

これを少しずつ見ていきます。まず、属性の定義方法について説明します。Python では、Attribute は次のようになります。

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

Behavior を設定するための XML コードは、Attribute のコードと似ていますが、同一ではありません。

<Behavior>
    <Class>hero.behaviors.Damage</Class>
    <Attribute>
        <Field>life</Field>
        <Link>life</Link>
    </Attribute>
</Behavior>
  • Class— 動作の Python クラス。
  • Attribute.Field— 属性への参照が配置される動作のフィールド
  • Attribute.Link— どの属性にリンクするか。上で定義した属性のNameタグの値の 1 つでなければなりません。
4

1 に答える 1

1

XML の代わりにjsonを使用することを検討しましたか? 冗長性が低く、読みやすく、すぐに使用できる Python データ構造に変換できます。

例えば:

import json

x='''{"Field": [{"Name": "health", "Value": 100}, {"Name": "toxicity", "Value": 78}],
    "Name": "life",
    "Class": "hero.attributes.Life"}'''

attribute=json.loads(x)

# {u'Class': u'hero.attributes.Life',
#  u'Field': [{u'Name': u'health', u'Value': 100},
#             {u'Name': u'toxicity', u'Value': 78}],
#  u'Name': u'life'}

そして、dictをjsonに戻すには、

attr=json.dumps(attribute)
于 2011-09-10T22:18:15.187 に答える