0

현재 브리 브레이커 클론 (예, 다른 것)을 만들고 있으며 1 개의 벽돌에 볼 벽돌 충돌이 있습니다. 나는 4 개의 다른 벽돌을 주석 처리했습니다. 볼이 벽돌과 충돌 할 때 올바른 코드가 있기 때문에 충돌 한 특정 벽돌보다는 모든 벽돌을 제거하기 때문입니다. 또한 볼은 게임 화면의 왼쪽 상단 근처에있을 때만 첫 번째 벽돌과 충돌합니다 (실제 벽돌에서 꽤 멀리 떨어져 있음). 나는 무엇을해야할지 잘 모르겠다. 벽돌을 조금 더 간격을두고 시도했지만 도움이되지 않았다.Brickbreaker C# (볼 브릭 충돌 감지)

int score = 0; 
if ((ballY > picBrk1.Height) && (ballY < picBrk1.Height + 30) && (ballX > picBrk1.Width) && (ballX < picBrk1.Width + 71)) 
{ 
    // ball rebounds off brick 
    yChange = -yChange; 

    // each brick adds 1 to score 
    score = score + 1; 
    lblScore.Text = "Score: " + score; 

    picBrk1.Visible = false; 
} 
+0

코드는 이미지가 아닌 텍스트로 보내주십시오. –

+0

@D Stanley Woops 매우 유감스럽게도, 이미지로 게시하는 것을 의미하지는 않습니다. 하하! –

+0

여기에 일부 코드가 누락 된 것 같습니다. 당신은 벽돌을 잔뜩 가지고 있어야하는데, 왜 당신의 상태에서'pcBrk1' 대신에'picBrk [i]'를 보지 못합니까? 편집 : nvm, 총 5 벽돌이 있습니다. List에 넣고 반복하면됩니다 : p – Kilazur

답변

0

벽돌의 현지화에 관해서는 매우 명확해야합니다. 나는 당신의 벽돌 클래스에 UpperLeft 속성을 추가 제안 :

public class Brick 
{ 
    /* your other properties here */ 

    public Point UpperLeft {get; set;} 
} 

확실히 UpperLeft 값이 제대로 벽돌의 왼쪽 상단의 좌표로 설정되어 있는지 확인합니다. 내 가정은 X와 Y가 표준 컴퓨터 이미지 표현을 따르고, 0,0이 이미지의 왼쪽 위 모서리이고 y가 남쪽으로 갈 때 증가한다는 것입니다 (일반적인 수학 표준과 다름). 그러면 충돌 검사는 다음과 같습니다 :

Point ballRelativeToBrick1 = new Point(
    ballX - picBrick1.UpperLeft.X, 
    ballY - picBrick1.UpperLeft.Y) 
bool collide = 0 < ballRelativeToBrick1.X && ballRelativeToBrick1.X < picBrick1.Width 
    && 0 < ballRelativeToBrick.Y && ballRelativeToBrick.Y < picBrick1.Height