使用movieclip数组进行As3碰撞检测?

时间:2013-05-09 23:58:06

标签: actionscript-3 flash collision-detection movieclip

好的,我的xChar.character是我的角色movieclip,xMap是构建地图的类的实例。

从xMap我添加使用函数内部变量从图像切片的movieclip。我做addChild(cell1);对于我的地图上显示的数组中的每个对象。

但是我可以使用的xMap类中唯一的公共变量是sliceObject,它是一个线性数组,包含来自movieclip的所有切片图像(此图像包含我希望角色与之碰撞的所有对象)。

所以我试着这样做:

package as3
{
public class wl_CollisionDetection
{
    var tChar;
    var tMap;
    public var _CheckCollision:Boolean;
    public function wl_CollisionDetection(xChar:wl_Character,xMap:wl_MapBuilder)
    {
        tChar = xChar;
        tMap = xMap;
    }
    public function CheckCollision()
    {
        _CheckCollision = false;
        if (tChar.character.hitTestObject(tMap.sliceObject[70]))
        {
            _CheckCollision = true;
            trace("Collision detected!");
            return;
        }
        else
        {
            _CheckCollision = false;
            trace("No collision");
            return;
        }
        _CheckCollision = false;
    }
}
}

我得到的只是无碰撞痕迹。

if (tChar.character.hitTestObject(tMap.sliceObject[70]))

我做错了什么?

1 个答案:

答案 0 :(得分:0)

也许您的问题来自于您正在测试地图中只有一个对象的碰撞。

尝试使用循环:

package as3
{
public class wl_CollisionDetection
{
    private var tChar:wl_Character;
    private var tMap:wl_MapBuilder;

    public function wl_CollisionDetection(xChar:wl_Character,xMap:wl_MapBuilder)
    {
        tChar = xChar;
        tMap = xMap;
    }

    public function checkCollision():Boolean
    {
        var numObject:int = tMap.sliceObject.length;
        for (var i:int = 0; i < numObject; i++)
        {
            if (tChar.character.hitTestObject(tMap.sliceObject[i]))
            {
                trace("Collision detected!");
                return true;
            }
        }
        trace("No collision");
        return false;
    }
}
}