2010-03-25 21 views
0

我正在Flash中製作格鬥遊戲,當我將所有東西都運行時,我錯過了一些東西:勝利/失敗屏幕。從邏輯上講,我知道該怎麼做:一個as和一個fla之間的EventDispatcher?

if character.hp < 0 
{ 
    character.dead = true; 
    dispatchevent("death", event) 
} 

我的問題是,我不知道如何編碼它。我知道我會使用兩個類和我的兩個.fla文件(除非我錯了)。

我有兩個在這裏播放的.fla文件:Menu.fla文件和Arena.fla文件。 Menu.fla包含遊戲,選項,角色選擇屏幕等的整個導航,並且當玩家參與戰鬥時,它加載僅包含背景(取決於所選階段)的Arena.fla文件和用於現在只設置爲一幀的長度。對於Arena.fla,真正的行爲發生在我的課堂上,但從邏輯上講,我只需要HP.asCharacter.as

Character.as,我已經宣佈了以下變量:

var isDead:Boolean = false; //is character dead? 

HP.as,相信我應該具備以下條件:

if(currentHp<0) 
{ 
    currentHp = 0; 
    character.isDead = true;  //declared as var `character:Object;` 
    EventDispatcher.dispatchEventListener("playerDead", playerDead); 
} 

最後,在Arena.fla,我希望能夠到檢測上述事件監聽者,並簡單地移動到第二幀,該第二幀將以「播放器一有效」或「播放器一失敗」的樣式顯示消息,其中按鈕將允許我返回到選擇的字符在屏幕上。這是我卡住的第一部分:如何檢測我的主.fla文件中的調度事件偵聽器?第二,如果玩家點擊了「CONTINUE」按鈕,無論玩家贏了還是輸了,那麼我的Menu.fla(加載Arena.swf)怎麼能檢測到這個點擊事件,卸載遊戲並返回到字符選擇屏幕?

非常感謝您的幫助。我意識到這是很多文字,但它是最具描述性的我可以。如果您對我的問題有任何疑問或需要澄清,請隨時發言。

-Christopher

回答

0

謝謝大家的幫助,但我已經想通了。原來,我的方法對於我想要做的事情來說太複雜了,而且我離開的時間太過複雜了。我會解釋我是如何做到的。

而不是像我想的那樣使用EventDispatcher,我使用SharedObject,它簡單地使所有工作都像魔術一樣工作。

只要正確引用它,就可以從應用程序/遊戲中的任何地方訪問。所以我只是在我的角色選擇屏幕中創建了一個名爲「winLossData」的SharedObject設置爲「無勝者」。這個cookie永遠不會保存也不會寫入磁盤,所以用戶沒有機會找到它(一般來說)。

我已決定使用包含我所有控件的Movement.as類,並編寫了一個類型爲Event.ENTER_FRAME的事件偵聽器,該事件偵聽器不斷檢查我的角色的健康狀態。如果其中一個低於100,則我的SharedObject立即取決於誰勝出(即,其健康點是而非低於100)的值爲「玩家一」或「玩家二」。後來,只是爲了以防萬一,我敗訴人物的健康點恢復到100下面的代碼:

function whoWon(event:Event):void 
    { 
     if(playerSpriteBar.getPower() <= 0) 
     { 
      winner.data.winner = "Player Two"; 
      playerSpriteBar.update(100); 
     } 
     if(playerAIBar.getPower() <= 0) 
     { 
      winner.data.winner = "Player One"; 
      playerAIBar.update(100); 
     } 
    } 

在我Menu.fla,我有Event.ENTER_FRAME類型的另一個事件偵聽器等待cookie來改變數值。一旦cookie更改值,Menu.fla會自動卸載外部swf(在本例中爲Arena.swf),並根據收到的SharedObject顯示結果。其餘的操作發生在Menu.fla文件中,所以不需要任何額外的編碼。

再次感謝大家的幫助。

1

我不知道你要讀的HP,但做的代碼,你知道character.dead實際上正在逐步成爲現實?

您可以隨時讓Arena.swf調用HP.as中的函數來終止遊戲並宣告勝利者。您可以將第二個幀添加到Arena.swf,其中包含灰色背景和WINNER或LOSER文本。 「

通常,用戶定義的類獲得事件分派功能的最簡單方法是擴展EventDispatcher。如果這是不可能的(也就是說,如果類已經擴展了另一個類),則可以改爲實現IEventDispatcher接口,創建EventDispatcher成員,並編寫簡單的掛鉤以將調用路由到聚合的EventDispatcher。

激活 Flash Player或AIR應用程序獲得操作系統焦點並變爲活動狀態時調度。

deactivate Flash Player或AIR應用程序失去操作系統焦點並變爲非活動狀態時調度。

Event dispatcher

+0

謝謝你的幫助,它讓我走上了正確的方向。 – 2010-03-31 15:27:04

相關問題