从另一个扩展类调用函数

时间:2012-03-29 00:12:01

标签: actionscript-3

我有我的主舞台,我有两个对象(块),这两个对象都从“Block”类扩展。 “Block”类不是从Main Class扩展的。

我想从Main Stage Class中调用一个函数,在“Block”类或它的子类中。根据您调用函数的对象,函数会做稍微不同的事情(向数组添加不同的东西和不同数量的东西)。实现这个的最佳方法是什么?

对不起,我现在没有代码可以显示,我只是试着坐下来现在就做,但感到非常迷失。

2 个答案:

答案 0 :(得分: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
}

希望这是你之后的

答案 1 :(得分:0)

一般的想法是在父类中定义函数,然后覆盖子类中的函数以执行不同的操作。然后,您可以在各个子类上调用该函数,它将根据块执行不同的操作。

一个简短的例子:

Block class:

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"