我一直在嘗試使用下降塊創建一個遊戲,這些塊將堆疊在彼此之上。塊將落入6列中的一列,當它們與該列上的頂部塊相撞時,需要停止落下屏幕。我一直在嘗試獲取頂部塊的y座標,但這會導致問題,因爲它仍然會獲取最新創建的塊而不是最後完成的塊。任何幫助將不勝感激!具有多個塊的html5畫布碰撞檢測
var FPS = 60;
setInterval(function() {
//update();
draw();
}, 1000/FPS);
var y = 30;
//draw the screen
function draw() {
if(+new Date() > lastTime + minWait){
var column = Math.floor(Math.random()*6)
lastTime = +new Date();
blocks.push(new Block(5 + column*40, 30,40,40, 5, "red","black"));
}
context.clearRect(0,0,canvas.width, canvas.height);
blocks.forEach(function(e){
e.update();
e.render();
});
};
var blocks = [];
var lastTime = +new Date();
var minWait = 1000;
var topBlock = 310;
function columnTop(column){
for(var i=0; i < blocks.length; i++){
if(blocks[i].x === (5 + 40*columnTop)){
if(blocks[i].y < topBlock){
topBlock = blocks[i].y
}
}
}
}
//block functions
Block.prototype.update = function(){
var topCol1 = columnTop(1);
var topCol2 = columnTop(2);
var topCol3 = columnTop(3);
var topCol4 = columnTop(4);
var topCol5 = columnTop(5);
var topCol6 = columnTop(6);
if(this.y < 310){
this.y+= this.dy
}else{
this.dy = 0;
}
};
Block.prototype.render = function(){
Block(this.x, this.y, this.w, this.h, this.r, this.fillstyle, this.strokestyle);
};
一個方面說明,而不是使用'setInterval' /'setTimeout',用['requestAnimationFrame'](HTTPS://developer.mozilla。 org/en-US/docs/Web/API/window.requestAnimationFrame)以更好地適應瀏覽器的重繪週期。 – Passerby
對我而言,我本能地使用網格系統。否則,保持跟蹤每個塊的下降(特別是當它們隨着時間的推移而被刪除時)將是一種痛苦 –
我怎樣才能使用網格系統,但是仍然能夠看到塊順利地落在屏幕上? –