2013-01-21 68 views
1

這是我的代碼:Easeljs的HitTest和hitRadius

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」,但我希望在我的玩家擊中怪物時獲得它,而不是在它下面。 我一直在玩regX和regy的玩家&怪物,但它似乎沒有工作。任何人都知道解決方案

回答

7

我覺得這裏的問題是,你需要一個CollisionDetection但則hitTest()將只檢查一個像素,它是用於鼠標交互檢測大多數情況下,是非常適合的。但是,使用它來檢測兩個位圖之間的衝突可能需要比測試一個像素更多的工作。 我建議你用我的CollisionDetection類的位圖和bitmapAnimations,它與邊界框或像素完美,你基本上只需要改變一行。 您可以檢查出來的Github: Bitmap Collision Detection for EaselJS 說明是在github.com頁。 (以防萬一,你會使用它:讓我知道如果您遇到任何錯誤)

+0

這是非常有用的!謝謝! 你能給我一個2位圖的CollisionDectetion的例子嗎? 我試過了,但它似乎沒有任何效果。 (我可能用錯了) –

+0

即使世界在Git倉庫中的示例文件,也有例子回購 – olsn

+0

的自述將這項工作在EaselJS正常的形狀? – Neil