저는이 문제를 아주 오랫동안 고집 해 왔으며, 주위를 검색하고 시도했지만 아무것도 작동하지 않습니다. 몇 가지 설명은 내가 프로그래밍 전반에 매우 새로운 점을 이해하고 배울 많은 것을 얻은 것처럼 이해하기가 어렵다.플래시로 브레이크 아웃 : 내 벽돌을 향상시키는 데 도움이 필요합니다. 볼 충돌
나는 두 가지 문제
1
있습니다 속도가 너무 빠른 때로는 때 볼이 늘 벽돌과 충돌.2 : 공은 2 개의 벽돌을 치는 것이 가능합니다. 두 가지 문제는 내 유형의 충돌 감지가 제대로 작동하기에 60fps로 충분하지 않다는 사실과 관련이 있습니다.
가능한 한 간단한 방법으로 충돌을 감지하여이를 방지 할 수있는 사람이 필요합니다.
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++;
}
}
내 나쁜 영어에 대한 당신과 죄송합니다, 감사의 나의 motherlanguage :
여기에 내 현재의 충돌 코드입니다.
, 당신의 벽돌 수평 정렬과 수직으로, 당신은 그리드 대 공을 쓸어 하나를 사용하여 주어진 후 그 지역을 확인하는 볼에 가장 가깝게 시작하여 경로를 겹칩니다. 충돌이 발생하면 벽돌을 깨고 새로운 각도, 속도 및 좌표를 계산합니다. – Vesper