0

私はFlashで格闘ゲームを作っていますが、すべてを実行しているのに、何かが足りません。勝利/敗北の画面です。論理的に、私はそれを行う方法を知っています:

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

私の問題は、それをどのようにコーディングするかがわからないことです。2つのクラスと2つの.flaファイルを使用することはわかっています(間違っていない限り)。

ここで使用されている2つの.flaファイルがあります。Menu.flaファイルとArena.flaファイルです。Menu.flaゲームのナビゲーション全体、オプション、キャラクター選択画面などが含まれ、プレイヤーが戦闘に参加する時間になるとArena.fla、背景(選択したステージに応じて)のみを含むファイルが読み込まれ、現在は1フレームのみの長さに設定します。の場合Arena.fla、実際のアクションはクラスで発生しますが、論理的には、とだけが必要HP.asになりCharacter.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、上記のイベントリスナーを検出して、ボタンで「PLAYERONEHASWON」または「PLAYERONEHASLOST」のスタイルでメッセージを表示する2番目のフレームに移動できるようにしたいと思います。文字選択画面に戻ることができます。これは私が立ち往生している最初の部分です:メインの.flaファイルでディスパッチされたイベントリスナーを検出するにはどうすればよいですか?

次に、プレーヤーが勝ったか負けたかに関係なく表示される[続行]ボタンをクリックした場合、このクリックイベントを検出し、ゲームをアンMenu.flaロードArena.swfして、キャラクター選択画面に戻るにはどうすればよいですか?

よろしくお願いします。これはたくさんのテキストだと思いますが、私ができる最も説明的なものです。ご不明な点がある場合や、私の質問について説明が必要な場合は、お気軽にご連絡ください。

-クリストファー

4

2 に答える 2

1

HPを読まなければならないコードについてはよくわかりませんが、character.dead実際にそれが真実になっていることを知っていますか?

HP.asで、ゲームを終了して勝者を宣言する関数をいつでもArena.swf呼び出すことができます。2番目のフレームをArena.swfに追加して、背景を暗くし、WINNERまたはLOSERのテキストを含めることができます。

一般に、ユーザー定義クラスがイベントディスパッチ機能を取得する最も簡単な方法は、EventDispatcherを拡張することです。これが不可能な場合(つまり、クラスがすでに別のクラスを拡張している場合)、代わりにIEventDispatcherインターフェイスを実装し、EventDispatcherメンバーを作成し、単純なフックを記述して、集約されたEventDispatcherに呼び出しをルーティングできます。

Flash PlayerまたはAIRアプリケーションがオペレーティングシステムのフォーカスを取得してアクティブになったときに、ディスパッチされます。

非アクティブ化 FlashPlayerまたはAIRアプリケーションがオペレーティングシステムのフォーカスを失い、非アクティブになったときにディスパッチされます。

イベントディスパッチャ

于 2010-03-29T14:20:59.077 に答える
0

皆様のご協力に感謝しますが、私はそれを理解しました。私の方法は、私がやりたいこと、そして私が去った時間にはあまりにも複雑すぎたことがわかりました。どうやってやったのか説明します。

EventDispatcher思ったように使う代わりに、SharedObjectすべてを魔法のように機能させるだけのを使用しました。

ASharedObjectは、正しく参照されている限り、アプリケーション/ゲームのどこからでもアクセスできます。そこでSharedObject、キャラクター選択画面で「WINLossData」を「NOWINNERS」に設定して作成しました。このCookieはディスクに保存されたり書き込まれたりすることはないため、ユーザーがCookieを見つける機会はありません(一般的に言えば)。

すべてのコントロールを含むクラスを使用することにし、キャラクターの健康状態を常にチェックするMovement.asタイプのイベントリスナーを作成しました。Event.ENTER_FRAMEそのうちの1つが100未満の場合、誰が勝ったか(つまり、ヘルスポイントが100未満でないSharedObjectか)に応じて、すぐに「PLAYERONE」または「PLAYERTWO」のいずれかの値を取ります。その後、念のため、負けたキャラクターの体力ポイントを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);
        }
    }

私の中には、Cookieの値が変わるのを待つMenu.flaタイプの別のイベントリスナーがあります。Event.ENTER_FRAMECookieが値を変更するとすぐにMenu.fla、外部swf(この場合はArena.swf)を自動的にアンロードし、受信したに応じて結果を表示しますSharedObject。残りのアクションはMenu.flaファイル内で行われるため、追加のコーディングは必要ありません。

もう一度、あなたの助けに感謝します。

于 2010-04-01T23:10:58.650 に答える