AS3导入功能并将其用作本地功能

时间:2014-10-31 17:47:10

标签: actionscript-3 import

假设我有两个AS3课程。 1是Hero类。第二个是Action类。 Action类中有一个名为walk()的函数。

我希望Hero类使用Action类函数walk(),但好像它是英雄类的本地函数。 我找到了哪种方法,但我想知道这是一种更好的做法,还是有更优化的方法来做到这一点

在Action Class我写道:

function Walk(MC,mcspeed,varexample1,varexample2,varexample3,varexample4){

  MC.x += mcspeed
  MC.varexample1 = varexample1
  MC.varexample2 = varexample2
  MC.varexample3 = varexample3
  MC.varexample4 = varexample4

}


//in the Hero class I wrote:
import Action  
// few line later ...
Action.walk(this,5,1,2,3,4)

它的工作原理。但是如果英雄有很多变量要通过walk函数,那么这可能不是一种非常优化的工作方式。如果Hero有50个函数,其中许多参数以30fps运行,那可能就是一团糟。而在本地它会更有效率

本地即:

function walk(){

  x += 5 // or = to any local variable
  varexample1 = 2
  varexample2 = 3
  varexample3 = 4
  varexample4 = 5
}

所以回顾一下。我想使用walk函数,就好像它是Hero类的本地函数一样。 怎么做?

由于

1 个答案:

答案 0 :(得分:0)

据我所知,您拥有的类查找越多(例如object.object.object)效率越低,因此技术上使用本地方法将胜过访问另一个类。话虽这么说,除了最严苛的情况外,你不太可能注意到性能差异。

然而,对于这种情况,你最好的选择似乎是使用继承。

据推测,除了英雄之外,您还需要将walk方法与其他类重用。你可以做的是创建一个基类(对于这个例子,我们称之为CharacterBase并假设使用walk的所有内容都是Sprite或MovieClip):

public class CharacterBase extends Sprite {
    protected var walkSpeed:Number = 10;

    public function walk():void {
        //your walk code
    }
}

现在你可以在你的英雄中继承这个类了(因此它的所有公共和受保护属性和方法都可用作本地范围。你甚至可以覆盖 walk类如果你需要在另一堂课中调整一下。

public class Hero extends CharacterBase {
    public function Hero(){
        walkSpeed = 20;
    }
}

public class Enemy extends CharacterBase {
    public function Enemy(){
        walkSpeed = 5;
    }

    override public function walk():void {
        super.walk(); //call the original walk method;
        //do something else?
    }
}

var myHeroInstance:Hero = new Hero();
myHeroInstance.walk();