1

これは私のコードです:

var spriteSheet = new createjs.SpriteSheet({
    images: ["images/mario2.png"],
    frames: {width:24, height:33, regX: 0, regY: 0},
    animations: {
        walk_right:     [5, 9],
        walk_up:        [10, 14],
        walk_down:      [15, 19],
        walk_left:      [0, 4]
    }
});


Player = new createjs.BitmapAnimation(spriteSheet);
Player.name = "Mario";
Player.gotoAndStop("walk_right");
Player.speed = 6;
Player.x = 30;
Player.y = 330;
//Player object toevoegen aan de stage
stage.addChild(Player);

    var monsterspritesheet = new createjs.SpriteSheet({
        images: ["images/MonsterA.png"], //image to use
        frames: {width: 64, height: 54, regX: 0, regY: 0},
        animations: {
            walk: [0, 9, "walk", 4],
            idle: [10, 20, "idle", 4]
        }
    });

Monster1 = new createjs.BitmapAnimation(monsterspritesheet);
Monster1.name = "Monster";
Monster1.gotoAndStop("walk");
Monster1.speed = 6;
Monster1.x = 180;
Monster1.y = 330;
stage.addChild(Monster1);
stage.update();

hitTest では、次のコードを使用します。

   var testpos = Player.globalToLocal(Monster1.x ,Monster1.y);

if (Player.hitTest(testpos.x, testpos.y) === true)
{
console.log("HIT");
}

問題: プレイヤーがモンスターの下にいるとき、「HIT」というメッセージが表示されますが、プレイヤーがモンスターの下にいるときではなく、モンスターにヒットするたびに機能させたいと考えています。Player と Monster の両方の regX と regY で遊んでいますが、うまくいかないようです。誰でも解決策を知っていますか?

4

1 に答える 1

7

ここでの問題は、CollisionDetection が必要ですが、hitTest() は 1 つのピクセルのみをチェックすることだと思います。これは、ほとんどの場合、マウス操作の検出に使用され、それに最適です。ただし、2 つのビットマップ間の衝突を検出するために使用するには、1 つのピクセルをテストするだけでなく、もう少し作業が必要になる場合があります。私の CollisionDetection クラスをビットマップと bitmapAnimations に使用することをお勧めします。バウンディング ボックスまたはピクセル パーフェクトで動作し、基本的に 1 行を変更するだけで済みます。Githubで確認できます: Bitmap Collision Detection for EaselJS Description は github.com ページにあります。(念のため、使用する場合: バグに遭遇した場合はお知らせください)

于 2013-01-21T23:33:50.770 に答える