2012-03-29 15 views
0

私は私のメインステージを持ち、2つのオブジェクト(ブロック)を持っています。これらの2つのオブジェクトは両方とも "ブロック"クラスから拡張されています。 "ブロック"クラスはメインクラスから拡張されていません。別の拡張クラスから関数を呼び出す

「ブロック」クラスまたはそのサブクラスのいずれかでメインステージクラスから関数を呼び出すことをお勧めします。関数は、関数を呼び出すオブジェクト(配列に異なるものと異なる数のものを加えたもの)に応じて、わずかに異なるものを行います。これを実装する最良の方法は何ですか?

申し訳ありません現在表示するコードはありません。座ってすぐにしようとしていますが、かなり迷っています。

+0

これらのブロックの両方が同じ機能を持つ必要があり、同じ機能を拡張しても、どのブロックがそれを呼び出すかに応じて2つの異なる処理を行う必要があることを意味しますか? – Marty

答えて

0

私はあなたがこれを意味すると仮定しようとしています。

あなたはあなたがこれらのブロックのうちの2つを作成し、それらを格納、おそらくあなたの基本クラスから配列にブロック

というクラスを持っています。

あなたのブロックのクラスで今すぐ
//stage base class 
var blockArray:Array = new Array() 

private function createBlocks():void{ 

    var blockOne:Block = new Block(1); //passing in an int to block, could be anything but this 
             // will be used to do slightly different things 

    var blockTwo:Block = new Block(2); 
    blockArray.push(blockOne...blockTwo) 
} 

//block class 
class Block{ 
    var somethingDifferent:int; //this is where we will store the int you pass in when the blocks are made 
    public function Block(aInt:int){ 
     somethingDifferent = aInt //grabbing the int 
    } 

    public function doSomething():void{ 
     trace(somethingDifferent); //will trace out the number passed 
    } 

} 

今すぐ戻ってあなたのメインクラスで

//stage base class 
private function doSomethingToBlocks():void{ 
    //lets call doSomething on each block 
    Block(blockArray[0]).doSomething() //this will trace 1 because we passed that into the block in our array slot 0 
    Block(blockArray[1]).doSomething() //this will trace 2 
} 

うまくいけば、これはあなたが

+0

優先度。あなたがた両方に感謝します。 –

0

後にしているものを一般的なアイデアを定義することです親クラスの関数を呼び出し、次にサブクラスの関数をオーバーライドして別のものを実行します。次に、さまざまなサブクラスで関数を呼び出すことができ、ブロックに応じて異なる処理を行います。

簡単な例:

ブロッククラス:

public function getBlockType():String 
{ 
    return "I am a plain block"; 
} 

まずブロックサブクラス

public override function getBlockType():String 
{ 
    return "I am a cool block"; 
} 

第二のブロックサブクラス:

public override function getBlockType():String 
{ 
    return "I am an even cooler block"; 
} 

段階:

//add the first block 
var coolBlock:CoolBlock = new CoolBlock(); 
addChild(coolBlock); 

//add the second block 
var coolerBlock:EvenCoolerBlock = new EvenCoolerBlock(); 
addChild(coolerBlock); 

//call the functions 
trace(coolBlock.getBlockType());//outputs "I am a cool block" 
trace(coolerBlock.getBlockType());//outputs "I am an even cooler block" 
+0

あなたがた両方に感謝します。 –

関連する問題