2011-07-11 12 views
0

私はjavaを使い慣れていません。xmlで定義されたメソッドを起動するアルゴリズム

私はゲームのレベロジックをタイマーで実装しています。

は私のゲームでは、私たちはあるレベルのどの第二にチェックして、より多くの事

switch(pSecond){ 
case 1: 
    xDestroyer.ClearPaths(); 
    xDestroyer.AddPathPredefined(1); 
    xDestroyer.AddPathPredefined(2); 
    xDestroyer.AddPathPredefined(3); 
    xDestroyer.AddPathPredefined(4); 
    xDestroyer.AddPathPredefined(5); 
    xDestroyer.EnemyStart(14f, 5, 5, 0.0001f); 
    xShuttle0.EnemyStartByPath(1,5f,8,2,0.2f); 
    xShuttle0.EnemyStartByPath(5,5f,8,2,0.2f); 
    break; 
case 17: 
    xShuttle0.EnemyStartByPath(1, 4f, 8, 2, 0.3f); 
    xShuttle1.EnemyStartByPath(5, 4f, 8, 2, 0.3f); 
    break; 
} 

などを敵を起動してくださいよ。 このロジックをXMLファイルにどのように転送することができますか。それを行う最善の方法は何ですか?

答えて

1

あなたはこのような何かを行うことができるかもしれない:

<trigger time="1"> 
    <action target="xDestroyer" verb="ClearPaths"/> 
    <action target="xDestroyer" verb="AddPathPredefined"> 
     <arg>1</arg> <!-- default type is "int" --> 
    </action> 
    <!-- etc. --> 
    <action target="xDestroyer" verb="EnemyStart"> 
     <arg type="float">14</arg> 
     <arg>5</arg> 
     <arg>5</arg> 
     <arg type="float">0.0001f</arg> 
    </action> 
    <action target="xShuttle0" verb="EnemyStartByPath"> 
     <arg>1</arg> 
     <arg type="float">5</arg> 
     <arg>8</arg> 
     <arg>2</arg> 
     <arg type="float">0.2</arg> 
    </action> 
    <!-- etc. --> 
</trigger> 
<trigger time="17"> 
    <!-- ... --> 
</trigger> 

アクションは、リフレクションを使用してターゲットに適用することができます。

ターゲットと動詞のライブラリをあらかじめ定義しておき、キーワードやインデックスでXMLで参照することもできます。ここで役に立つテクニックは、各アクション(メソッド名)のオブジェクトタイプを定義することです。その後、それらを配列またはハッシュ・テーブルに入れて、キーワードまたはキーワードをXMLから参照することができます。

interface Action { 
    void apply(String targetName, String... args); 
} 

class ClearPathsAction implements Action { 
    void apply(String targetName, String... args) { 
     Destroyer destroyer = findDestroyer(targetName); 
     destroyer.ClearPaths(); // args ignored 
    } 
} 

class AddPathPredefinedAction implements Action { 
    void apply(String targetName, String... args) { 
     Destroyer destroyer = findDestroyer(targetName); 
     int index = Integer.parseInt(args[0]); 
     destroyer.AddPathPredefined(index); 
    } 
} 

// etc. 

このプロセスのいくつかの時点で、いくつかのエラーチェックと処理を行うことをお勧めします。 :)

+0

これは、仕事をします、ありがとう! –

0

あなたの動機や問題がどこにあるかについて、多くの背景を私たちに伝えているわけではありません。 私はここで多くを推測しています。 JavaのにXMLを読み込むについて

  1. 実際の技術的なもの:

    私はあなたの質問をされるかもしれない三つの異なる領域を見ることができます。

  2. Destroyer、Shuttle0、Shuttle1などの1つのアーティファクトに関連する個々の情報を表現する方法
  3. アルゴリズムの全体的な表現方法、1秒あたりのアクションの範囲。

最初に、私がJAX/Bを使用する歴史と環境の理由から、XMLを読むための多くの良いJavaライブラリがありますが、多くの選択肢があります。

2番目の項目では、何らかのアクションを表すXMLからどのようなオブジェクトを取得するかを決定する必要があります。コードはxDestroyerオブジェクトとxShuttleオブジェクトがあらかじめ存在するように見えます(私はそれらのゲームオブジェクトと呼んでいます)、あるときはからまでのものを行います。そうであれば、XMLからある種の「イベント」オブジェクトを取得して、それを適切なゲームオブジェクトに適用すると思います。

私は最初に可能な種類のイベントのセットを定義し、次にXMLを生成して一連のイベントを表現するようにしました。したがって、DestroyerEventには、事前定義されたパスの配列とEnemy定義が含まれている可能性があります。

これで、特定の秒に対応するイベントグループを表すだけで、XMlファイル(または複数のファイル、毎秒1つのファイル)に一連のXMLイベントが含まれます。

要約:XMLから読みたいオブジェクトのクラスについて考えると、XMLの詳細はそのままにしておいてください。クラスモデルが適切になったら、XMLを生成するための素晴らしいツールがあります。

関連する問題