首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >as和fla之间的EventDispatcher?

as和fla之间的EventDispatcher?
EN

Stack Overflow用户
提问于 2010-03-25 23:04:19
回答 1查看 203关注 0票数 0

我正在用Flash制作一个格斗游戏,虽然我所有的东西都在运行,但我遗漏了一些东西:一个胜利/失败的屏幕。从逻辑上讲,我知道怎么做:

代码语言:javascript
复制
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中,我声明了以下变量:

代码语言:javascript
复制
var isDead:Boolean = false;    //is character dead?

HP.as中,我相信我应该具备以下几点:

代码语言:javascript
复制
if(currentHp<0)
{
    currentHp = 0;
    character.isDead = true;     //declared as var `character:Object;`
    EventDispatcher.dispatchEventListener("playerDead", playerDead);
}

最后,在Arena.fla中,我希望能够检测到上面提到的eventlistener,并简单地移动到第二个帧,它将以"PLAYER ONE HAS with“或"PLAYER ONE HAS LOST”的样式显示一条消息,并带有一个按钮,允许我返回到字符选择屏幕。这是我陷入困境的第一部分:如何在我的主.fla文件中检测分派的事件侦听器?

其次,如果玩家单击"CONTINUE“按钮,无论玩家是赢是输,都会显示该按钮,那么我的Menu.fla (加载Arena.swf)如何检测此单击事件、卸载游戏并返回到角色选择屏幕?

先谢谢你帮了我一把。我知道这是一大堆文字,但这是我能做的最具描述性的了。如果您对我的问题有任何疑问或需要澄清,请畅所欲言。

-Christopher

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-02 07:10:59

谢谢你们的帮助,但我已经想明白了。事实证明,我的方法对于我想做的事情和我离开的时间来说太复杂了。我会解释我是怎么做到的。

我没有像我想象的那样使用EventDispatcher,而是使用了SharedObject,它简单地让一切变得像魔法一样。

只要正确引用SharedObject,就可以从应用程序/游戏中的任何位置访问它。因此,我简单地创建了一个名为"winLossData“的SharedObject,并在我的字符选择屏幕中将其设置为”无赢家“。这个cookie既不会保存,也不会写入磁盘,所以用户没有机会找到它(通常来说)。

我决定使用包含所有控件的Movement.as类,并编写了一个Event.ENTER_FRAME类型的事件侦听器,用于不断检查角色的健康状态。如果其中一个低于100,我的SharedObject会立即取“玩家一”或“玩家二”的值,这取决于谁赢了(即谁的生命值不低于100)。之后,为了防患于未然,我将输掉的角色的生命值重新设置为100。代码如下:

代码语言:javascript
复制
    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文件中,因此不需要任何额外的编码。

再次感谢大家的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2516621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档