2014-04-01 28 views
1

我一直在網上搜索,並沒有運氣幾個小時閱讀。可能是因爲它很基礎,也許是因爲我對術語感到困惑。 (這裏的小菜很好。)很快拿起一本書,但在那之前,也許有人可以爲我澄清這一點。如何使用其他類/文件的功能? AS3

我在做一個簡單的RPG風格的遊戲。我有多個文件。 MainClass.as,Hero.as,FrontEnd.as,& Levels.as。我讓他們都成爲公開課。我在FrontEnd.as中有一個名爲gotoMainMenu()的函數,在Hero.as中有一個名爲currentHP的變量。我想做出檢查currentHP和功能

if(currentHP <= 0) {gotoMainMenu()} 

從我讀過,我需要實例化我的英雄職業FrontEnd.as存取其功能...但它不爲我工作。所有文件都在同一個文件夾中。我試過這個:

var frontend:FrontEnd = new FrontEnd(); 
addChild(frontend); 
if(currentHP <= 0) {frontend.gotoMainMenu()} 

但這也行不通。 也嘗試導入類... 如何從另一個類訪問函數和變量?

+0

的可能重複[AS3 - 呼叫類之間的方法(http://stackoverflow.com/questions/21060513/as3-call-a-method-between-類) –

回答

0

你想在這裏做什麼,是什麼在你的英雄類創建前端的新實例的所謂「依賴注入」

相反,要在前端的實例上的媒體鏈接的存在是爲了通過進入你的英雄階層。

因此,例如,你可能也有你的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); 
} 
+0

C:\ ... \ Flash Files \ Hero.as,第10行1017:未找到基類EventDispatcher的定義。 我是否需要製作一個BackEnd.as文件來處理這些事情?以及如果我想調用多個類的函數呢?像公共職能英雄(前端:前端,級別:級別)? – PHaZerous

+0

您需要導入EventDispatcher。 http://stackoverflow.com/questions/5586830/inherited-a-class-from-eventdispatcher-in-flash-but-custom-event-not-received 是的,如果你需要訪問更多的類,你可以注入更多課程。一旦開始注射超過3個班級,我會使用另一種方法,現在我將其添加到答案中。 – Bob

相關問題