【问题标题】:Strange issues when using addChild and hitTest with AS3在 AS3 中使用 addChild 和 hitTest 时出现的奇怪问题
【发布时间】:2013-04-29 02:39:33
【问题描述】:

在动作脚本 3 中添加孩子时遇到了一些问题。我目前正在构建 Space Invaders 游戏,并且正在编写将小行星添加到舞台的函数。

我的第一个问题是每次我尝试添加新的小行星时都会添加所有以前的小行星。

我的第二个问题是添加 hitTestOject 函数时。当宇宙飞船撞击小行星物体时,它会抛出一个错误并且它什么都不做。

这是我收到的 hitTestObject 错误:

TypeError:错误 #1034:类型强制失败:无法转换“ast_0” 到 flash.display.DisplayObject。在 spaceranger_fla::MainTimeline/addAstroid() 在 flash.utils::Timer/_timerDispatch() 在 flash.utils::Timer/tick()

这是我的代码。我使用计时器,所以每 5000 毫秒添加一次小行星:

// Add astoid
var astTimer:Timer = new Timer(5000);
astTimer.addEventListener(TimerEvent.TIMER, addAstroid);
var i:Number = 0;
function addAstroid (e:TimerEvent):void{
    var ast = new astroid();
    ast.name = "ast_"+i;
    ast.y = Math.random()*stage.stageHeight;
    ast.x = 565;
    addChild(ast);
    trace(i);
    if(ship.hitTestObject(ast.name)){
        gotoAndStop("2");
    }
i = i+1;
}

astTimer.start();

我们将不胜感激一些建议、建议和答案:)

更新

我对循环错误进行了排序。老小行星不再出现! :D

非常感谢,

彼得·斯图尔特

【问题讨论】:

    标签: actionscript-3 flash object hittest addchild


    【解决方案1】:

    根据您的第一个问题,它不会出现 i 递增 - 它始终是 0

    当你分配名字时,增加i:

    ast.name = "ast_" + (i++).toString();
    

    基本上说i = i + 1;

    接下来,对实例本身进行测试,而不是身份:

    ship.hitTestObject(ast)
    

    不确定你的游戏是如何运作的,但看起来你真正想要的是两个处理程序:

    • 偶尔会添加一颗新的小行星
    • 一个测试碰撞的工具

    目前您的addAsteroid() 函数添加了一个新的小行星,并在创建时立即测试它是否与飞船相撞。那颗小行星将永远不会再进行碰撞测试。如果这类似于经典的小行星游戏,您可能希望将每个小行星推送到一个数组中,并为ENTER_FRAME 添加一个事件侦听器,以测试每个小行星与船的碰撞。

    【讨论】:

    • 根据您刚才的编辑,我看到您在示例中添加了 i=i+1;
    • 嗨,Jason,是的,我在调试时删除了增量代码,我忘了添加它,但这并没有什么不同。每个小行星物体都是一个影片剪辑,影片剪辑正在循环播放。我通过在补间动画的末尾添加“stop()”来解决这个问题。现在让我的 hitTestObject 工作了吗?
    • 是的,你的回答对我来说很有意义!我将创建一个每 500 毫秒检查一次命中的计时器!谢谢:)
    【解决方案2】:

    ship.hitTestObject(ast.name) 不起作用,因为ast.name 是字符串,而不是 DisplayObject。

    试试这个:

    if(ship.hitTestObject(ast)){
            gotoAndStop("2");
        }
    

    【讨论】:

    • 不走运,ship.hitTestObject(ast) 返回 false :(
    • 问题是关于强制错误,这解决了这个问题。如果它返回 false 并且您不知道为什么,那是另一个问题。打开一个新问题。
    • 所以接受这个答案,它解决了强制错误。如果您不接受解决问题的答案,您认为有人会帮助您解决下一个问题的可能性有多大? - 顺便说一下,这个新问题与这个答案解决的问题相同。
    • 没有,但这并不能解决全局问题。不要告诉我接受什么答案,这是我自己的判断。它确实解决了部分问题,1+,但脚本中仍然存在问题....我现在仍然对 hitTest 错误,但我认为这是因为它正在运行 hitTest添加,而不是稍后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多