[英]Trouble resetting objects in Actionscript 3 / Flash CS5
我正在Flash CS5和Actionscript 3.0中制作一个简单的平台游戏。 当玩家丧命时,我希望它将其重定向到“游戏结束”屏幕,他们可以在其中选择“重试”按钮来重新启动游戏。
我很难找到一种方法来做到这一点。 我一直在尝试通过执行以下操作来实现自己的目标:
这样做可能不是一个很好的方法,但是如果可行,那么我很高兴。 我只希望短暂显示“游戏结束”屏幕,如果玩家单击“重试”按钮,他们可以从头开始玩。
现在,上述实现的问题在于,当我将所有游戏元素设置为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
对象可以代表游戏的不同状态。 MainMenu
, Play
, GameOver
, Reset
等
每个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.