我的舞台上有一个名为dude的movieclip,其中moviclip是一个带有一个名为axeframe的影片剪辑的框架,另一个名为ax的影片剪辑。我想要做的是在axeframe a中做一个hittest,这样当斧头(只有斧头不是角色)击中 舞台 上的敌人(命名敌人)时会消失。这是我的代码:
addEventListener(Event.ENTER_FRAME, axehit);
function axehit(event:Event):void {
if (axe.hitTestObject(enemy)) {
removeChild(enemy.stage)
}
}
它给了我这个错误
1120:访问未定义的属性enemy.if(axe.hitTestObject(enemy)){
1120:访问未定义的属性enemy.removeChild(enemy.stage)
答案 0 :(得分:0)
你不能在没有任何进一步说明的情况下引用enemy
(它会假设敌人是你放置代码的动画片段的孩子。请改用stage.enemy
,然后{ {1}},或this
代替this.parent
。
(假设敌人是axe
上的动画片段,你发布的代码在stage
内
此外,您应该将axe
更改为removeChild(enemy.stage)
,您应该查看变量范围。
编辑:不。 对不起,只是假装你没有读过(忘了你不能只通过舞台引用对象)
对你说实话,这也是我开始的方式,但这不是闪存编码的正确方法。首先,您应该尝试将所有代码保留在主时间轴上,而不是单独的动画片段中,以便更好地协同工作。一旦掌握了它,你应该查看面向对象的编程。它确实增加了工作流程,使您能够创建更大,更复杂的脚本。
更多编辑:
所以要将放在主时间轴上,需要以下内容:
stage.removeChild(stage.enemy)
哪个更干净,更易读(也更容易找到)。 (假设stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(event:Event):void {
if (axe.hitTestObject(enemy)) {
this.removeChild(enemy)
}
}
和axe
是主舞台上的动画片段)