私は非常に長い間この問題に悩まされてきました。たくさん検索して試してみましたが、何も機能しません。いくつかの説明は、私がプログラミング全体にかなり慣れていないため、理解するのが非常に難しく、学ぶことがたくさんあります。
2つの問題があります
1: 速度が速すぎると、ボールがブロックに衝突しないことがあります。
2: ボールはレンガ 2 個を打つことができます。両方の問題は、私のタイプの衝突検出が適切に機能するには 60 fps では不十分であるという事実に関連しています。
これが起こらないようにする衝突検出を行うために必要なことを、できるだけ簡単な方法で誰かに説明してもらいたいだけです。
これが私の現在の衝突コードです:
private function checkCollision(): void {
grdx = Math.floor((ball.x) / 28);
grdy = Math.floor((ball.y) / 14);
ngrdx = Math.floor((ball.x + dx) / 28);
ngrdy = Math.floor((ball.y + dy) / 14);
var flipX: Boolean = false;
var flipY: Boolean = false;
if ((grdy <= level.length - 1) &&
(ngrdy <= level.length - 1) &&
(grdy >= 0 && ngrdy >= 0)) {
if (testBlock(grdx, ngrdy)) {
flipY = true;
paddleFlag = 1;
}
if (testBlock(ngrdx, grdy)) {
flipX = true;
paddleFlag = 1;
}
if (testBlock(ngrdx, ngrdy)) {
flipX = true;
flipY = true;
paddleFlag = 1;
}
dx *= flipX ? -1 : 1;
dy *= flipY ? -1 : 1;
}
}
private function testBlock(xPos: int, yPos: int): Boolean {
if (level[yPos][xPos] > 0 && level[yPos][xPos] != 13) {
trace("hit on X,Y");
level[yPos][xPos] = 0;
breakBlock("Block_" + yPos + "_" + xPos);
trace("Block: " + totalBreaks + " / " + totalBlocks);
return true;
}
return false;
}
private function breakBlock(blockName: String): void {
if (this.getChildByName(blockName)) {
this.removeChild(this.getChildByName(blockName));
totalBreaks++;
}
}
母国語ではない下手な英語で申し訳ありません。