Вызов функции из другого расширенного класса - PullRequest
0 голосов
/ 29 марта 2012

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

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

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

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Общая идея состоит в том, чтобы определить функцию в родительском классе, а затем переопределить функцию в подклассе, чтобы делать разные вещи.Затем вы можете вызвать функцию для различных подклассов, и она будет выполнять разные действия в зависимости от блока.

Краткий пример:

Класс блока:

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 голосов
/ 29 марта 2012

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

У вас есть класс с именем 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
}

Надеюсь, это то, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...