假设我有两个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
类的本地函数一样。
怎么做?
由于
答案 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();