【问题标题】:hitesting the weapons攻击武器
【发布时间】:2011-11-03 00:52:57
【问题描述】:

我的舞台上有一个名为 dude 的影片剪辑,该影片剪辑是一个帧,其中包含一个名为 axeframe 的影片剪辑和另一个名为 axe 的影片剪辑。我想要做的是在 axeframe 中做一个 hittest,这样当斧头(只有斧头不是角色)在 stage 上击中敌人(命名为敌人)时,他会消失。这是我的代码:

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)

【问题讨论】:

  • 未来任何更好/更快/更轻松的方法都会非常有帮助

标签: actionscript-3 actionscript


【解决方案1】:

你不能只引用 enemy 而没有任何进一步的说明(它会假设敌人是你放置代码的影片剪辑的子级。尝试使用 stage.enemythis,或者this.parent 而不是 axe。 (假设敌人是stage 上的影片剪辑,而您发布的代码在axe 内) 此外,您应该将removeChild(enemy.stage) 更改为stage.removeChild(stage.enemy),并且您可能应该查看变量范围。


编辑:不。 抱歉,请假装你没读过(忘了你不能只通过 Stage 引用对象)

老实说,这也是我开始的方式,但这不是 Flash 编码的正确方法。首先,您应该尝试将所有代码保留在主时间轴上,而不是单独的影片剪辑中,以便更好地协同工作。一旦你掌握了窍门,你也应该看看面向对象编程。它确实增加了工作流程,使您能够创建更大、更复杂的脚本。

更多编辑:

因此,要将其放在主时间轴上,需要以下内容:

stage.addEventListener(Event.ENTER_FRAME, loop);

function loop(event:Event):void {
    if (axe.hitTestObject(enemy)) {
        this.removeChild(enemy)
    }
}

这也更干净、更易读(也更容易找到)。 (假设axeenemy 是主舞台上的电影剪辑

【讨论】:

  • 我仍然收到这些错误 1119:通过静态类型 flash.display:Stage 的引用访问可能未定义的属性敌人。 1120:访问未定义的属性敌人。
  • 太棒了 :) 祝你的项目好运 ;)
猜你喜欢
  • 1970-01-01
  • 2018-11-17
  • 2021-09-08
  • 1970-01-01
  • 2011-06-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多