hitTestObject动态添加电影

时间:2013-05-05 12:15:57

标签: actionscript-3 flash object displayobject

我有一个代码,可以在舞台上添加一个影片剪辑。问题是,在添加它之后我想在该对象实例上添加一个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()在flash.utils :: Timer / tick()

这是我的代码:

// 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);
    if(ship.hitTestObject(ast.name)){
        gotoAndStop("2");
    }
    i = i+1;
}

我知道ast.name是一个字符串而不是显示对象,所以如何将其转换为显示对象?

谢谢,

佩德罗

1 个答案:

答案 0 :(得分:1)

您的问题源于对代码的基本误解以及代码的确切运作方式。所有程序员都应这样开始,请不要对此评论采取任何攻击。您询问如何将字符串转换为显示对象,以便引用该对象。真正的问题应该是,“我如何找到另一种引用显示对象的方法?”您可以使用一种方法,它将通过它的名称获取对象,并将对象返回给您。如果您必须以这种方式执行程序,[parent] .getChildByName()将允许您传递[object] .name。

但是,此功能还有其他问题。如果您接受我的建议,您可能会编辑您的代码,但您仍然无法看到您正在寻找的结果,这会导致您得出错误的结论。事实并非如此,让我解释一下。您正在向舞台添加一个对象,并在同一时刻执行hitTest()。一旦添加了小行星,它基本上就完成了对命中测试的检查。即使您的所有代码都正确无误,也不会返回您要查找的结果。你需要一个单独的addAstroid()函数OUTSIDE来处理你的命中测试。

总结:鉴于您提供的代码以及您提出的问题,我建议您在进入完全成熟的游戏之前建议编写更简单的概念(即使是像Asteroids这样看似简单的游戏)。我还建议学习足以理解错误。系统的声音本身就是错误,如果您不理解错误,您将无法理解系统告诉您的错误。这些仅仅是建议,而不是命令。

此链接应该有助于解释显示对象和您正在使用的方法。 ActionScript 3 - DisplayObject.hitTestObject()