【问题标题】:How to create a HitTestObject for an object that is not yet created?如何为尚未创建的对象创建 HitTestObject?
【发布时间】:2014-12-11 04:15:03
【问题描述】:

我有一个精灵数组,根据用户输入动态变化。我需要测试每一个是否与单个物体发生碰撞。 唯一的问题是我认为“bridgeSpriteArr”值在编译时需要为非空。 但是我们不知道在编译时数组中会有多少“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");
                }
            })

【问题讨论】:

  • bridgeSpriteArr[i] = bridgeSprite 是什么意思? bridgeSpriteArr[i] 似乎是 bridgeSpriteArr 数组的元素,但它出现在循环之外...... bridgeSprite 变量是什么?请显示您的代码的相关部分。
  • @helloflash 显然这家伙不擅长 AS3 数组,我希望显示的代码处于没有边界的循环中,他不知道如何确定它们。

标签: actionscript-3 sprite collision hittest


【解决方案1】:

在 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 以供进一步参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2016-08-31
    • 2022-10-19
    • 1970-01-01
    相关资源
    最近更新 更多