繁体   English   中英

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

Trouble resetting objects in Actionscript 3 / Flash CS5

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在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;
    }
2 个回复

这更多是架构问题,而不是代码问题。 就个人而言,我在所有自定义类上创建一个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()函数来包装所有切换对象属性的内容。

1 加载图像时遇到问题,而不是在actionscript-3中使用绘制的对象

我正试图从一个佳能制作一个球,这很好,但我想把一个经典从一个绘制的经典变成我有一个经典的图像。 但是,当我这样做时,我得到以下错误,当我点击舞台拍摄球,而绘制版本球按计划拍摄: TypeError:错误#1009:无法访问空对象引用的属性或方法。 at code2 / create ...

3 重置画布中的群组时遇到问题

我一直在开发侧面滚动游戏,该游戏在画布上生成随机的外星人。 该游戏具有基本的街机物理和射击功能,我现在正在为我的游戏开发重新启动功能,到目前为止,我已经完成了重置画布上的生活,得分和玩家的工作。 但是我在重置外星人群体时遇到麻烦。 我为外星人编写的代码是create函数,但是当我在重新启动 ...

4 重置统一游戏时遇到问题

https://i.imgur.com/El9iCsP.gifv 上面是正在发生的事情的图像。 只要我按下重置按钮,游戏就可以很好地进行重置,但是当玩家实际死亡(撞墙)时,游戏不会重新启动。 基本上,我正在为一个大学项目制作一种“速度赛跑者”游戏(真的是一起快速破解),但这也是我第一次 ...

5 Flash:组件在CS5中不起作用,在CS4中起作用

我花了整整一天的时间试图将基于SWC的组件转换为基于FLA的组件,并且除了实时预览外,其他所有工作都可以正常进行-显示只是连续在两个帧(头像和皮肤)之间循环。 经过大量尝试,我已经在Flash CS4中加载了该组件,并且实时预览可以正常工作,我还通过下载的示例组件对此进行了确认。 有 ...

6 调用aspx.cs方法时遇到问题

我的aspx页面包含带有某些值的下拉mwnu。 当下拉列表中检测到更改时,我想在相关的loadInstances()页面中调用我的loadInstances()方法。 我将事件侦听器附加到菜单上,如下所示: 我的aspx.cs方法看起来像这样: 其中ListBoxData是我 ...

8 我在访问对象内数组中的嵌套对象时遇到问题

我很新,这是我的第一个问题帖子,我希望其他人会遇到类似的问题。 接口地址 我正在接收 api 数据并转换为 JSON 格式。 从中我可以访问对象中的键和值(每个怪物) 我能够访问special_abilities[0].name ,在这种情况下,我返回"One with Wind" 。 我无 ...

10 在 Java 中删除 DoubleLinkedList 中的对象时遇到问题

我正在为这个 remove(Object obj) 方法苦苦挣扎。 我尝试了很多不同的东西,这是我能得到的最接近的。 被删除的项目是传入对象之前的项目: 我的测试中的当前输出是删除与传入的对象匹配的节点之前的节点。 谢谢你。 编辑:为了确保我正确理解这一点,我的inFront变量位于doom ...

2020-10-18 06:11:20 2 38   java
暂无
暂无

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

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