2014-10-31 86 views
0

假設我有兩個AS3類。 1是Hero類。第二個是Action類。動作類在其中有一個函數walk()AS3導入功能並將其用作本地功能

我希望Hero類使用Action類函數walk(),但好像它是英雄類的本地函數。 在這裏,我找到了方法,但我想知道這是否是一個更好的做法,或者有更優化的方式來做到這一點

在Action類我寫道:

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) 

它的工作。但是,如果英雄有很多變量通過漫遊功能,那可能不是一種非常優化的工作方式。如果Hero有50個函數,其中有許多以30fps運行的參數,那可能是一團糟。而當地這將是更有效的

地方,這將是:

function walk(){ 

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

因此,要回顧一下。我想使用散步功能,就好像它是Hero類的本地功能一樣。 如何做到這一點?

感謝

+0

無論是本地範圍或不一個函數調用是一個函數調用,所以很少有更多的功能不如其他人。你沒有範圍你的方法,你不要輸入你的變量。此時不要去寫課程。 – BotMaster 2014-10-31 17:57:38

+0

你實際上正在調用一個你沒有定義的叫做'walk'的靜態函數,所以你的第一個代碼實際上是行不通的。您不可能注意到任何性能差異,但是本地函數在技術上會更高效,因爲它不必訪問其他類。你最好使用繼承 - 將你的'walk'方法放在一個基類中,讓你的英雄(和其他使用它的東西)擴展這個基類 – BadFeelingAboutThis 2014-10-31 18:39:44

回答

0

據我所知,你有更多的類查找(如object.object.object)它獲得的效率較低,所以技術上使用本地方法將超越訪問另一個類。這就是說,除了最苛刻的環境之外,你不可能注意到性能差異。

然而,對於這種情況,最好的辦法就是使用繼承。

大概你需要重複使用步行方法與英雄以外的其他職業。你可以做的,是創建一個基類(在這個例子中可以稱之爲CharacterBase並假定使用走的是一個Sprite或MovieClip一切):

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

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

現在你可以在你的英雄繼承這個類(從而讓所有的它可作爲當地範圍的公共和受保護的屬性和方法。你甚至可以覆蓋步行類,如果您需要調整有點另一個類。

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();