2012-03-29 5 views
0

У меня есть моя основная сцена, и у меня есть два объекта (блоки), эти два объекта также распространяются от класса «Блок». Класс «Блок» НЕ распространен из основного класса.Вызов функции из другого расширенного класса

Я бы хотел вызвать функцию в классе «Блок» или в ее подклассах из класса основной сцены. Функции будут делать несколько разные вещи, в зависимости от того, к какому объекту вы вызываете функцию (добавлены разные вещи и разные количества элементов в массив). Каков наилучший способ реализации этого?

Прошу прощения, у меня нет кода для показа прямо сейчас, я просто пытаюсь сесть и сделать это сейчас, но чувствую себя совершенно потерянным.

+0

Вы имеете в виду, что оба этих блока должны иметь одинаковую функцию, и хотя они расширяют одно и то же, функции должны выполнять две разные вещи в зависимости от того, какой блок называет это? – Marty

ответ

0

Не совсем уверен, что я следую, поэтому я собираюсь предположить, что вы имеете в виду это.

У вас есть класс с именем Block

создать два из них Блока и хранить их, возможно, в массиве из базового класса.

//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

Префект. Спасибо вам обоим. –

Смежные вопросы