我正在用Javascript創建一個遊戲,使用需要碰撞檢測的畫布,在這種情況下,如果玩家精靈碰到一個盒子,玩家不能通過盒子。Javascript畫布碰撞檢測
我有一個名爲blockList
的全局數組,其中包含所有正在繪製到畫布的框。它看起來像這樣:
var blockList = [[50, 400, 100, 100]];
而且他們被吸引到畫布像這樣:
c.fillRect(blockList[0][0], blockList[0][1], blockList[0][2], blockList[0][3]);
我也有一個玩家對象,它有一個更新的方法和draw方法。更新根據鍵盤輸入等設置播放器的位置,draw由主遊戲循環用於將播放器繪製到畫布上。玩家正在制訂這樣的:現在
this.draw = function(timestamp) {
if(this.state == "idle") {
c.drawImage(this.idleSprite, this.idleSprite.frameWidth * this.idleSprite.frameCount, 0, this.idleSprite.frameWidth, this.idleSprite.frameHeight, this.xpos, this.ypos, this.idleSprite.frameWidth, this.idleSprite.frameHeight);
if(timestamp - this.lastDraw > this.idleSprite.updateInterval) {
this.lastDraw = timestamp;
if(this.idleSprite.frameCount < this.idleSprite.frames - 1) { this.idleSprite.frameCount++; } else { this.idleSprite.frameCount = 0; }
}
} else if(this.state == "running") {
var height = 0;
if(this.facing == "left") { height = 37; }
c.drawImage(this.runningSprite, this.runningSprite.frameWidth * this.runningSprite.frameCount, height, this.runningSprite.frameWidth, this.runningSprite.frameHeight, this.xpos, this.ypos, this.runningSprite.frameWidth, this.runningSprite.frameHeight);
if(timestamp - this.lastDraw > this.runningSprite.updateInterval) {
this.lastDraw = timestamp;
if(this.runningSprite.frameCount < this.runningSprite.frames - 1) { this.runningSprite.frameCount++; } else { this.runningSprite.frameCount = 0; }
}
}
}
,玩家有一定的性能是player.xpos
,player.ypos
,player.width
,player.height
。塊的屬性相同。因此,我擁有所需的一切來實現碰撞檢測,但我不知道如何去做。我試過這樣的事情:
if(player.x > blockList[0][0] && player.y > blockList[0][1])
但它遠非完美或可播放。
有誰知道一個簡單的方法或函數能夠返回true或false的基礎上,如果兩個對象相撞?