繁体   English   中英

在ActionScript 3 / Flash CS5中重置对象时遇到问题

[英]Trouble resetting objects in Actionscript 3 / Flash CS5

提示:本站提供中英文对照查看,鼠标放在中文字句上可显示英文原文。 若本文未解决您的问题,推荐您尝试使用帮您解决。

我正在Flash CS5和Actionscript 3.0中制作一个简单的平台游戏。 当玩家丧命时,我希望它将其重定向到“游戏结束”屏幕,他们可以在其中选择“重试”按钮来重新启动游戏。

我很难找到一种方法来做到这一点。 我一直在尝试通过执行以下操作来实现自己的目标:

  • 将所有内容(播放器,背景等)设置为visible = false
  • 将“游戏结束”影片剪辑设置为visible = true(在游戏过程中不可见)
  • 让“游戏结束”影片剪辑中的按钮隐藏该影片剪辑,然后重新显示所有游戏元素
  • 重置玩家的位置开始,将比分设置为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;
    }

这更多是架构问题,而不是代码问题。 就个人而言,我在所有自定义类上创建一个reset()函数。 在此函数中,我需要执行任何操作以将对象设置为默认状态。 设置位置,alpha,可见,自定义道具等

至于何时调用它,实际上取决于您,但是对于您来说,一种好的设计模式就是状态设计模式。

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

每个State都有一个begin() ,一个end()以及一个update() 当你的StateManager切换状态,它会调用end()State离开,并start()State的未来,你只能在一个State的时间,所以它可以让您根据您轻松自己的逻辑封装在你的游戏中。

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

对于复位逻辑,在Reset状态下,您可以在所有对象上调用reset()函数,或手动设置它们。 通过状态进行游戏的路径如下所示:

MainMenu (播放) - > Reset (或Init状态) - > Play - > GameOver (重播) - > Reset - > Play

没有内置的逻辑可以重置对象,您需要自己照顾一下。 采用这样的模式可以帮助您。

我曾经在浏览器和平台上有过丰富的经验,这些经历使我的显示/隐藏代码的实现略有不同。 有时有必要将元素移出舞台(object.x = -3000)以完全禁用它们。 这不是最佳实践,但是如果您只需要继续前进,它将避免启用和禁用对象时发生任何冲突!

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

问题未解决?试试使用:帮您解决问题。
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM