如何为尚未创建的对象创建HitTestObject?

时间:2014-12-11 04:15:03

标签: actionscript-3 sprite collision hittest

我有一种情况,我有一个精灵数组,根据用户输入动态变化。我需要测试其中每一个与单个对象的碰撞。 唯一的问题是我认为' bridgeSpriteArr'值必须在编译时为非null。 但我们不知道有多少' bridgeSprite'在编译时会有数组,因为它会改变用户输入。 有什么想法吗?

            bridgeSpriteArr[i] = bridgeSprite
            Main.getStage().addChild(bridgeSprite);

            Main.getStage().addEventListener( Event.ENTER_FRAME, 
            function objectCollision(e:Event):void
            {
                if ( object1.hitTestObject(object2))
                {
                    trace("hit object");
                }
                else 
                {
                    trace("miss object");
                }
            })

            Main.getStage().addEventListener( Event.ENTER_FRAME, 
            function bridgeCollision(e:Event):void
            {
                if ( object1.hitTestObject(bridgeSpriteArr[i]))
                {
                    trace("hit bridge");
                }
                else 
                {
                    trace("miss bridge");
                }
            })

1 个答案:

答案 0 :(得分:0)

在Actionscript中,3个数组是动态的,因此您不需要知道编译时将有多少个对象。相反,使用Array类功能来管理数组。比如,如果要将对象添加到数组中,可以使用push()方法,因此行bridgeSpriteArr[i] = bridgeSprite应替换为此行:

bridgeSpriteArr.push(bridgeSprite);

还有length属性可用于检查数组中是否有项目,以及有多少项目。您可以通过将代码包装在以下内容中来对数组中的每个项运行一些代码:

for (var i:int=0;i<someArray.length;i++) {
    // current item is someArray[i]
    doSomethingWith(someArray[i]); 
}

您应该阅读manual on Array class以获取进一步的参考。