Actionscript 3 在AS3中使用addChild和hitTest时出现奇怪的问题

Actionscript 3 在AS3中使用addChild和hitTest时出现奇怪的问题,actionscript-3,flash,object,hittest,addchild,Actionscript 3,Flash,Object,Hittest,Addchild,在动作脚本3中添加孩子时,我遇到了几个问题。我目前正在制作一个太空入侵者游戏,我正在编写将小行星添加到舞台上的功能 我的第一个问题是,每次我尝试添加一个新的小行星时,都会添加以前的所有小行星 我的第二个问题是当我添加HitteProject函数时。它抛出一个错误,当宇宙飞船撞击小行星时,它什么也不做 以下是我收到的hitTestObject错误: TypeError:错误#1034:类型强制失败:无法转换“ast#U 0” 到flash.display.DisplayObject。在 佛罗里达州

在动作脚本3中添加孩子时,我遇到了几个问题。我目前正在制作一个太空入侵者游戏,我正在编写将小行星添加到舞台上的功能

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

我的第二个问题是当我添加HitteProject函数时。它抛出一个错误,当宇宙飞船撞击小行星时,它什么也不做

以下是我收到的hitTestObject错误:

TypeError:错误#1034:类型强制失败:无法转换“ast#U 0” 到flash.display.DisplayObject。在 佛罗里达州:MainTimeline/addAstroid()位于 flash.utils::Timer/_timerDispatch()在flash.utils::Timer/tick()处

这是我的密码。我使用计时器,因此每5000ms添加一颗小行星:

// 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

非常感谢,


彼得·斯图尔特(Peter Stuart)

对于您的第一个问题,它不会以增量的形式出现,而是始终为
0

分配名称时,递增
i

ast.name = "ast_" + (i++).toString();
基本上,说
i=i+1

接下来,针对实例本身而不是标识进行命中测试:

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

  • 偶尔添加一个新的小行星
  • 测试碰撞的人
当前,您的
addAsteroid()
函数会添加一个新的小行星,并立即测试它在创建时是否与飞船碰撞。那颗小行星再也不会进行碰撞试验了。如果这类似于经典的小行星游戏,您可能希望将每个小行星推送到一个数组中,并为
ENTER\u FRAME
添加一个事件侦听器,以测试每个小行星是否与船发生碰撞

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

试试这个:

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

根据您刚才的编辑,我看到您添加了
I=I+1