Я пытался создать игру с падающими блоками, которые будут складываться друг на друга. Блоки попадают в один из 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
Для меня я бы инстинктивно использовал сетчатую систему. В противном случае отслеживание каждого упавшего блока (особенно, когда они будут удалены с течением времени) будет больно –
Как я могу пойти с сеткой, но все еще есть вид блоков, плавно падающих на экран? –