2012-04-23 9 views
2

私はupdateメソッドを持っているゲーム内のエンティティを持っている、それは、最も近いゾンビをターゲットにする必要があり、現在、ゾンビのリストは、私がアクセスだけでグローバルオブジェクトであるが、これは間違っているようだ、私は更新方法の中にリストを渡すことができますこれが最善のアプローチであるかどうかはわかりません。ここjavascript gameメインウィンドウからエンティティの結合を減らすにはどうすればよいですか?

は私の更新方法の簡易版である:

this.update = function() { 
       var targetedZombie = null; 
       //TODO: should not be using the zombies object - tight coupling should be removed 
       var alivezombies = []; 
       for (var zombie in zombies) { 
        if (zombies[zombie].Alive) { 
         alivezombies.push(zombies[zombie]); 
        } 
       } 

       targetedZombie = this.GetClosestEntity(alivezombies); 
       if (targetedZombie) { 
        Fire(this, targetedZombie); 
       } 
}); 

答えて

1

利用閉鎖 が//あなたが始めるためにゲームアーキテクチャ上のAPI

(function(global) { 
     var zombies = []; // accessible only to you 

     function zombieManager() { 
     this.addZombie = function() { zombies.push() } 
     this.killHalfZombies = function() { 
        zombies = zombies.filter(function(item,i) { return i % 2 == 0}); 
     } 
     } 
     global.zombieManager = new zombieManager(); 

     function hero() { 

     }; 

     hero.prototype.update = function() { 
     //dig zombies[] 
     //do whatever state change 
     }; 
     global.hero = hero; 
    })(window); //<-- you pass in whatever rootlevel object we have. window in a browser. 

//use api 
    var myhero = new hero(); 
    hero.update() //<-- this can access zombies 

    zombieManager.addZombie(); //<-- zombieManager is a singleton and is responsible for zombification 
+0

シングルトンを使用しての有用なアイデア、これはまだ全体のAPIにゾンビの配列を露出しているが、私は何かが欠けていない限り、APIは、効果的に全体の試合になるだろうか? – foz1284

+0

あなたのAPI /ゲーム全体でゾンビを利用できないようにしてください。上の例は、メインデータの1つをパブリックに書き込み可能なウィンドウプロパティに結合しない方法を示しています。 –

1

いくつかの良いリソースを初期化gamedevに"Good resources for learning about game architecture"?です。一般的には、ゲームのコンポーネントを単一の概念に分割することをお勧めします。この単純なシナリオでは、ゾンビのリストをGameクラスのコンポーネントにして、FindClosest(PositionOfHero)メソッドを持っています。ウィンドウは、グローバルアレイとしてのグラフ間のリンクを維持するのではなく、正しいオブジェクトグラフのみを開始します。

+0

リンクのおかげで、私はすでに基本コンセプトを妥当に把握していると思います。ゾンビをコンポーネントとして持つことは、依然としてヒーローがコンポーネントのインスタンスをグローバルオブジェクトとして持つ必要があることを意味します(コンポーネントラッピング配列と配列自体を公開するだけですか?) – foz1284

関連する問題