0

わかりました xChar.character はキャラクターのムービークリップで、xMap はマップを構築するクラスのインスタンスです。

xMap から、関数内にある変数を使用して画像からスライスしたムービークリップを追加します。私は addChild(cell1); を行います。配列内にあるマップに表示されるすべてのオブジェクトに対して。

しかし、私が使用できる xMap クラスの唯一のパブリック変数は、slicedObject です。これは、ムービークリップからスライスされたすべての画像を保持する線形配列です (この画像には、キャラクターを衝突させたいすべてのオブジェクトが含まれています)。

だから私はこれをやろうとしました:

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]))

私が間違っていることは何ですか?

4

1 に答える 1

0

おそらく、あなたの問題は、マップから 1 つのオブジェクトのみとの衝突をテストしているという事実から来ています。

ループを使用してみてください:

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;
    }
}
}
于 2013-05-10T00:24:27.687 に答える