【问题标题】:Using arrays and hitTest - AS3使用数组和 hitTest - AS3
【发布时间】:2016-11-29 05:42:02
【问题描述】:

从我朋友告诉我的情况来看,这应该有效,但事实并非如此。

var P2hb:Array = new Array(P2char1, P2char2, P2char3);
var P2life:Number = 0;  

addEventListener(Event.ENTER_FRAME, framecheck)
function framecheck(event:Event):void
{
if (P2hb.hitTestObject(P1attack)) { P2life-=2; }
}

这是一个通用代码,但它与我拥有的相同。基本上, P2hb 中的所有元素都是舞台上的movieclips。 我想说的是,如果 P1attack 命中数组中的任何对象,那么 P2life 将下降 2,而不必为每个单独的对象键入 hitTestObject()
我似乎无法让它工作。谁能告诉我我做错了什么?
提前谢谢你。

【问题讨论】:

  • P2hb 是一个Array,其中没有hitTestObject() 方法!您的意思很可能是这样的:P2hb[0].hitTestObject(P1attack) 用于 if 语句标准!
  • ...还有,你想做什么?!
  • 如何让 [0] 等于所有三个对象?
  • 我想说的是,如果 P1attack 命中数组中的任何对象,那么 P2life 将下降 2,而不必为每个单独的对象键入 hitTestObject

标签: arrays actionscript-3 hittest


【解决方案1】:

只需循环遍历数组中的每个单独的“movieClip”(例如,使用for 循环)并检查与其他对象的碰撞:

function framecheck(event:Event):void
{
    for each (var enemy in P2hb) {
        if (enemy.hitTestObject(P1attack)) {
            P2life-=2;
            trace("hit occurred! P2life: "+P2life);
        }
    }
}

【讨论】:

  • 这会检查同一帧中的所有影片剪辑吗?或逐帧检查每个影片剪辑?想让它检查单个帧中的所有剪辑
  • 我尝试了代码,它只触发数组中的第二项
  • @Koden 既然您已经将framecheck() 函数注册为ENTER_FRAME 处理程序,那么所有函数内的代码将被执行一次 而“播放头”进入每一帧 :)
  • @Koden It 表示您的P1attack 只命中了第二个项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
相关资源
最近更新 更多