无法在Actionscript 3 / Flash CS5中重置对象

时间:2011-03-16 19:20:53

标签: flash actionscript flash-cs5

我正在Flash CS5和Actionscript 3.0中制作一个简单的平台游戏。当玩家失去一生时,我希望它将玩家重定向到“游戏结束”屏幕,在那里他们可以选择“再试一次”按钮重新开始游戏。

我很难找到办法做到这一点。我一直在努力通过以下方式实现我的目标:

  • 将所有内容(播放器,背景等)设置为visible = false
  • 将“Game over”影片剪辑设置为visible = true(在游戏过程中不可见)
  • 让“Game over”影片剪辑中的按钮隐藏影片剪辑,然后重新显示所有游戏元素
  • 重置玩家开始的位置,将分数设为0,等于3等。

这可能不是一个非常好的方法,但如果它有效,那么我很高兴。我只想简单地显示“游戏结束”屏幕,如果玩家点击“再试一次”按钮,他们可以从一开始就玩。

现在,我实现上述问题的问题是,当我将所有游戏玩法元素设置为false后将其设置为visible = true时,游戏停止了...键盘输入没有重新激活,游戏元素是显示但不活跃。有什么关于我不知道的可见属性吗?是否会混淆对象的“状态”?

以下是Actionscript文件中的一些代码片段......

if(lives >= 0) {
                    //print number of lives
                }
                else {
                    gameOverFlag= true;

                    //hide game objects, show game over menu
                    Coins.visible = false;
                    Platforms.visible = false;
                    Background.visible = false;
                    StartPosition.visible = false;
                    thePlayer.visible = false;

                    GameOver.visible = true; //this is the movie clip with the "Game over" text and "Try again" button in 
                    GameOver.TryAgainButton.addEventListener(MouseEvent.CLICK, playagain);

                }


function playagain(event:MouseEvent):void
    {
        //start game again

        Coins.visible = true;
        Platforms.visible = true;
        Background.visible = true;
        StartingPosition.visible = true;
        thePlayer.visible = true;
    }

2 个答案:

答案 0 :(得分:0)

这更像是一个架构问题而不是代码问题。就个人而言,我在所有自定义类上创建了一个reset()函数。在这个函数中,我做了将对象设置为默认状态所需的一切;设置位置,alpha,可见,自定义道具等。

至于什么时候打电话,这取决于你,但对你来说一个好的设计模式就是状态设计模式。

基本上,游戏中有一个StateManager来保存和控制不同的State个对象。这些State个对象可以代表游戏的不同状态; MainMenuPlayGameOverReset等。

每个State都有begin()end(),可能还有update()。当您的StateManager切换成员时,它会在end()离开时拨打State,并在start()上拨打State。您只能在一个State {1}},因此它可以让您根据游戏中的位置轻松封装逻辑。

begin()功能中,您可以设置该特定状态所需的一切。例如,begin()状态的Play函数可以添加控制游戏所需的所有键盘/鼠标事件侦听器。在end()功能中,您可以清除您设置的所有内容。在end()状态的Play函数中,您将删除所有键盘/鼠标事件侦听器。这意味着除非玩家处于Play状态,否则玩家不可能做任何游戏逻辑。如果您的update()中有State函数(每个帧都称为Play,那么您可以在Reset示例中检查播放器是否还没有生命,或已达到下一个级别的分数。

对于重置逻辑,在reset()状态下,您可以在所有对象上调用MainMenu函数,或手动设置它们。通过状态游戏的路径看起来像这样:

Reset(播放) - > Init(或Play州) - > GameOver - > Reset(重播) - > Play - > {{1}}

没有内置逻辑来重置对象,你需要自己处理它。采用这样的模式可以有所帮助。

答案 1 :(得分:0)

我有过使用浏览器和平台的经验,这使我的show / hide代码实现略有不同。有时需要将元素移出舞台(object.x = -3000)以完全禁用它们。这不是最佳实践,但如果您只需要继续生活,它将避免启用和禁用对象的任何冲突!

绝对使用reset()函数来包装切换对象属性的所有内容。