0

我有将影片剪辑添加到舞台的代码。问题是,添加后我想在该对象实例上添加一个 hitTestObject 但是我不断收到此错误:

TypeError: Error #1034: Type Coercion failed: cannot convert "ast_0" to flash.display.DisplayObject.  at

spaceranger_fla::MainTimeline/addAstroid() 在 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 是一个字符串而不是显示对象,那么如何将其转换为显示对象?

谢谢,

佩德罗

4

1 回答 1

1

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

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

总结:鉴于您提供的代码和您提出的问题,我建议您在进行完整的游戏(即使是看似简单的游戏,如 Asteroids)之前编写更简单的概念。我还建议学习足够的知识来理解错误。你的系统的声音就是错误本身,如果你不理解错误,你就不会理解你的系统在告诉你什么。这些只是建议,而不是命令。

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

于 2014-04-08T18:22:19.267 回答