在操作脚本3中添加一个孩子时,我遇到了一些问题。我目前正在构建一个Space Invaders游戏,并且正在编写将小行星添加到舞台上的功能。在AS3中使用addChild和hitTest时出现的奇怪问题
我的第一个问题是,每次我尝试添加一个新的小行星时,都会添加所有以前的小行星。
我的第二个问题是当我添加hitTestOject函数。它抛出一个错误,当太空船撞击小行星物体时它不会做任何事情。
这是我收到与hitTestObject错误:
TypeError: Error #1034: Type Coercion failed: cannot convert "ast_0" to flash.display.DisplayObject. at spaceranger_fla::MainTimeline/addAstroid() at flash.utils::Timer/_timerDispatch() at 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();
一些意见,建议和答案,将不胜感激:)
UPDATE
我排序的循环错误。旧小行星不再出现! :d
非常感谢,
彼得·斯图尔特
根据您的编辑,我看你接着说:I = I + 1;'你的例子。 – 2013-05-05 00:33:08
嗨,杰森,是的,我调试时删除了增量代码,我忘了添加它,但这没有什么区别。每个小行星对象都是一个影片剪辑,影片剪辑正在循环。我通过在补间动画结束处添加“stop()”来解决此问题。它现在让我的hitTestObject工作? – 2013-05-05 11:25:16
是的,你的回答对我有意义!我将创建一个计时器,每500毫秒检查一次命中数。谢谢:) – 2013-05-05 15:07:36