2011-07-25 7 views
1

私は最近、プログラミングの途中で死んでしまいました。そして、私は、壊れているコードをすべて実現するようになったのは、あるクラスのインスタンスと別のクラスのインスタンスとのやり取りの仕方がわからないからです。ここで私が何をしようとしています何の要旨は次のとおりです。別のクラスのクラスのすべてのインスタンスとのやりとりはどうしますか?

 if(this.hitTestObject(targetClip)){ 
      trace("hit!"); 
      } 

問題でも、文書クラスができますが、私はキャンバス上にある単一のインスタンスを扱う場合、私は「未定義のプロパティtargetClipへのアクセス」を取得し、ありますそれとうまくやり取りする。 targetClipのクラスファイルをターゲットにすると、「型クラスの値を関連のない型flash.display:DisplayObjectに暗黙的に強制変換」します。 hitTestの問題だけでなく、他のアクションでこの問題が発生しているので、私は理解していない基本的な構文がいくつかあります。私が逃しているものを私に見せてください。

答えて

1

私はあなたの質問に100%ではありませんが、あなたが求めているのは、 "Cla"のいずれかのインスタンスからhitTestObjectを呼び出す方法です「ClassB」のすべてのインスタンスで「ssA」と表示されますか?だから、BulletオブジェクトがPlayerオブジェクトに当たったかどうかをチェックするようなものです。

これが本当に問題であれば、(私が知っている)クラスのすべてのインスタンスの「グローバルリスト」はありません。しかし、それはあなたがクラスのインスタンスの静的ベクトルを使って自分自身をやることを止めるものではありません。ただし、これは通常よりもコードを少しきれいにする必要があるので注意してください。弾丸とプレイヤーを使用した簡単な例を示します。

class Bullet extends Sprite //or w/e it is your objects extend 
{ 
    public Bullet() 
    { 
    } 

    public function checkCollisionsWithPlayers() : void 
    { 
     for(var i : int = 0; i < Player.AllPlayers.length; ++i) 
     { 
      var player : Player = Player.AllPlayers[i]; 
      if(this.hitTestObject(player)) 
      { 
       trace("hit!"); 
      } 
     } 
    } 
} 

class Player extends Sprite 
{ 
    static public const AllPlayers : Vector.<Player> = new Vector.<Player>(); 

    public Player() 
    { 
     AllPlayers.push(this); 
    } 

    //remove unused Players from the AllPlayers list 
    public function free() : void 
    { 
     var index : int = AllPlayers.indexOf(this); 
     if(index >= 0) 
     { 
      AllPlayers.splice(index, 1); 
     } 
    } 
} 

これにより、作成されたすべてのプレーヤーのリストが表示されます。 Bulletの任意のインスタンスに対してcheckCollisionsWithPlayers関数を呼び出すと、現在インスタンス化されているすべてのPlayerオブジェクトでヒットがチェックされます。

しかし、free()関数を使用しなくなった後、Vectorがガベージを許可しないインスタンスで参照を保持しているため、未使用のプレーヤをクリーンアップしないとメモリリークが発生しますコレクターは、死んだプレーヤーに虚偽のヒットを返すかもしれないことは言うまでもなく、メモリを清掃する)。このようなパターンを使用すると、バグが発生しやすいので、リストをきれいにするには注意が必要です。

+0

ありがとう!以前はベクトルを使ったことがなかったので、このコードは最初はやや鈍いものでしたが、これは私が必要としていたものです。将来はクラス外のインスタンスを参照できます。 –

0

別々のクラスはお互いを知りません。別のクラス(クラスB)の変数(たとえばクラスA)にアクセスするには、クラスBのgetterメソッドを作成する必要があります。

getVariable(){return variable;}

及び静的(B.getVariable())または動的に、クラスAからそのメソッドを呼び出すアクセスするために明示的な方向周辺

クラス(BのBBB =新しいB(); bbb.getVariable())他のクラスで保持されている情報

+0

私は変数がグローバルではないことを知っていますし、あるクラスから別のクラスにそれらを取得するためにそれらを引き出すために、私はクラスの子供について尋ねています。オブジェクトAのインスタンスがオブジェクトBのインスタンスにオブジェクトのいずれかから接触しているかどうかをチェックするにはどうしたらいいですか?ドキュメントクラスは簡単にそれを行うことができます。このような小切手を出すためには、正確には何を得る必要がありますか? –

+0

一度にそのコードのN個のコピーを実行する代わりに、ドキュメントクラスを使用してみてください。 –

+0

インスタンスを取得してみてください。 Bの子供をフィールドにしてAからアクセスしてください。しかし、それは良いコードスタイルではありません。 – ben

関連する問題