你想在這裏做什麼,是什麼在你的英雄類創建前端的新實例的所謂「依賴注入」
相反,要在前端的實例上的媒體鏈接的存在是爲了通過進入你的英雄階層。
因此,例如,你可能也有你的heroclass的構造是這樣的:
public function Hero (frontend:FrontEnd) {
this.frontEnd = frontEnd;
}
And then you can do
if(currentHP < 0) { frontEnd.gotoMainMenu()};
如果你需要注入超過3類到類,你應該開始考慮通過而屬性注入構造函數。
你類是這樣的:
package {
public class Hero {
public var frontEnd:FrontEnd;
public var levels:Levels;
public var weapon:Weapon;
public function Hero() {
}
public function fire(){
if(weapon){
weapon.fire();
}
}
public function getHit()
{
if(frontEnd)
{
if(currentHP < 0) { frontEnd.gotoMainMenu();}
}
}
public function increaseScore() {
if(levels){
levels.increaseScore();
}
}
}
}
然後,當你實例化你的英雄職業也應該是這樣的:
var hero:Hero = new Hero();
hero.levels= levels;
hero.frontEnd = frontEnd;
hero.weapon = machineGun;
或者,你可以使用依賴注入框架如RobotLegs2爲你做這個工作。 https://github.com/robotlegs/robotlegs-framework
但是,這不是在這種情況下處理事情的正確方法。 在這種特殊情況下,您真正想要做的是發送事件。
所以,你會:
import flash.events.EventDispatcher;
import flash.events.Event;
public class Hero extends EventDispatcher{
}
,然後在一些功能,你可以這樣寫:
if(currentHP < 0) {dispatchEvent(new Event(DIED));}
然後在其中你的英雄坐在類,你會做這樣的事情這樣的:
addEventListener(Hero.DIED, handleDeath);
private function handleDeath(e:Event){
frontEnd.gotoMainMenu();
}
一個調度事件的巨大優勢,就是可以有多個薄gs聽同一個事件。或者你甚至可以切換監聽事件的內容。
,所以你可以這樣做:
if(hasRessurection)
{
hero.addEventListener(Hero.DIE, restartLevel,false,0,true);
town.addEventListener(Hero.DIE, increaseRessurectionCost, false,0,true)
} else {
hero.addEventListener(Hero.DIE, gotoMainMenu,false,0,true);
}
的可能重複[AS3 - 呼叫類之間的方法(http://stackoverflow.com/questions/21060513/as3-call-a-method-between-類) –