2017-12-01 9 views
0

まず、ネイティブの英語のスピーカーではありませんが、わかりやすく理解できるように努力します。ObjectContainerを介してオブジェクトのメソッドにアクセスできないのはなぜですか?

私のプログラミングクラスでは、アニメーションcc(フラッシュ)でタイルベースのゲーム(exelpleのように)を作る必要があります。マップ上では、音楽のリズムに変化するタイルでダンスフロアを作りたいです。これらのタイルは、2つのフレーム、1つの白と1つの赤のムービークリップです。

private function createGrid(): void { 

     grid = new MovieClip(); 
     addChild(grid); 
     for (var r: int = 0; r < nbRow; r++) { 
      for (var c: int = 0; c < nbCol; c++) { 
       var t: Tiles = new Tiles(); 
       t.x = t.width * c; 
       t.y = t.height * r; 
       grid.addChild(t); 
      } 
     } 

     grid.x = 15; //center the grid on x 
     grid.y = 35; //center the grid on y 
} 

これはタイルクラスです:

この

はタイルが生成される方法である

package { 
import flash.display.MovieClip; 
import flash.events.*; 

public class Tiles extends MovieClip { 
    private var rand:int; 

    public function Tiles() { 
     // constructor code 
     getTiles(); 
    } 
    public function getTiles():void { 
     random(); 
     setColor(); 
    } 
    private function random() : void{ 
     rand = Math.floor(Math.random()*100)+1; 
    } 

    private function setColor() : void{ 
     if(rand<=30){ 
      gotoAndStop(8); //red frame 
     }else{ 
      gotoAndStop(7); //white frame 
     } 
    } 
} 

}

createGrid()マップが配置されるとすぐにタイルを配置ムービークリップのタイルごとにステージと在庫にグリッド。今、私はleftpeekの特性を必要と知っている

var s: Sound = new Sound(); 
var sc: SoundChannel; 

s.load(new URLRequest("GameSong_mixdown.mp3")); 
sc = s.play(0, 1000); 

タイルがストリーミング音楽のビートに赤と白の間でランダムに変化(30%赤瓦の割合が70%白のタイルを維持)したいですそれを達成するために私のSoundChannelではなく、今のところ、私はこの機能をトリガーボタンで私のテストを実行します。今

private function setTiles(e: Event): void { 
     // loop through all child element of a movieclip 
     for (var i: int = 0; i < grid.numChildren; i++) { 
      grid.getChildAt(i).getTiles();   
     } 
    } 

、問題がある:私は私のタイル方法をアクセスもできませんよ。グリッド上のトレースgetChildAt(i)を実行し、コンソール内のすべてのタイルのインスタンスを見ました。だから、私のタイルのすべてのインスタンスがグリッドに格納されていることは確かです。しかし、私は理由を知らない、grid.getChildAt(i).getTiles();動作しません(およびTilesの他のすべてのメソッド)。エラーメッセージ:静的型flash.displayの参照を使用して、おそらくudefinedメソッドgetTilesを呼び出します。

誰かが間違っていることを知っていますか?

PS:私は、コードをより明確にするために、フランス語から 英語にすべての私のクラス名、VAR名などを翻訳しました。

答えて

0

あなたの間違いは)getChildAt(...)方法はどちらも動的であるのDisplayObject(あなたはランダムなプロパティにアクセスすることはできません)の戻り値の型を持っても、それは(DisplayObject.getTilesを持っているということですメソッド。

必要なのは、このオブジェクトが実際にタイルクラスのあるプログラム伝えることです:

private function setTiles(e:Event):void 
{ 
    // loop through all child element of a movieclip 
    for (var i: int = 0; i < grid.numChildren; i++) 
    { 
     // Cast display objects to Tiles class. 
     var aTiles:Tiles = grid.getChildAt(i) as Tiles; 

     // Call the method. 
     aTiles.getTiles();   
    } 
} 
+0

おかげでたくさん!今それは働く –

関連する問題