私は論理的な問題を抱えています。多分あなたは賢い人が私を解決するのを手伝ってくれるでしょう。私はCanvasでJavascriptを学んでおり、純粋なJavascriptを使用して一種の「ブレイクアウト」ゲームを構築しようとしています。
http://www.seas.upenn.edu/~cis120e/hw/SwingGame/images/breakout.png
パドル、ボール、そしてブロックの配列を作成しました-さまざまなプロパティ(xPos、yPos、width ...など)を持つオブジェクト、今私はボールと上部のブロックとの衝突を検出しようとしています画面。
これは私が行う方法です:
//This is my block Object definition
function block(x,y,width,height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
ctxBlock.fillStyle = 'green';
ctxBlock.fillRect(this.x, this.y, this.width, this.height);
}
//This is for draw blocks on the canvas
mattone.prototype.draw = function(){
ctxBlock.fillStyle = 'green';
ctxBlock.fillRect(this.x, this.y, this.width, this.height);
}
//This is the check for collision method
var blocks = [];
function checkCollision(){
for (var i = 0; i < blocks.length; i++){
if(ballY - ballRadius <= blocks[i].y + blockWidth){
ctxBlocks.clearRect(tmpx, tmpy, blockWidth, blockHeight);
speedY = (-speedY);
break;
}
}
checkColl = requestAnimationFrame(checkCollision);
}
基本的に、ボールの「Y」が「<」の場合、ブロックの配列内のブロックの1つの「Y」(トラフをループしてすべてのブロックをチェックする)を削除する必要があることをキャンバスに伝えようとしています。そのブロックと跳ね返ります。
しかし、それが行うことは、彼が触れたブロックではなく、常にそのブロックの行の左側の最初のブロックをキャンセルすることです。
これは私のコードリンクへのリンクである必要があります *コードでブロックの代わりにmattoniという単語を使用したことに注意してください
みなさん、良い一日を。