2013-11-04 1 views
1

vb.net에서 게임을 만들고 있는데, "For Each PictureBox In Me.Controls"를 코드에 추가하면 문자가 그림 상자와 충돌하는지 여부를 알 필요가 있습니다. 'T는 여기에 더 이상 어떤 충돌을 감지 코드는 다음과 같습니다 "Me.Controls에서 각 PictureBox를 들어"추가 몇 가지 이유를 들어Picturebox가 모든 그림 상자와 충돌합니다.

For Each PictureBox In Me.Controls 
    If Not Collision(picBox1, PictureBox) Then 
     walk = 1 
     tmrWalk.Start() 
     picBox1.Top -= 5 
    End If 
Next 

도 크게 그 방향으로 이동 속도를 속도가 빨라집니다.

콜리슨 내가 그것을 테스트했기 때문에 지정 모두 pictureboxes 동안 충돌이 작동하는 것을 알고, 모듈에서입니다

+0

귀하의 문제는 무엇입니까? 이미 모든 피스톨 상자에 대해 테스트하지 않습니까? – Eisenhorn

+0

"For Each PictureBox In Me.Controls"를 더 이상 충돌을 감지하지 못하는 코드에 추가하면 –

+0

두 번째 코드를 게시 할 예정입니다. – Eisenhorn

답변

0

그는 모든 부분이기 때문에 문제는, 당신은 플레이어 자신에 대해 확인하고 있다고 할 수있다 그림 상자는이 경우 탈출해야하므로 aswell : 그래서 지금 충돌이 발생하는 경우

Dim colliding as Boolean = false 
For Each pb as PictureBox In Me.Controls 
    ' Dont test against the player 
    If Not pb is picBox1 
     ' Check for collision 
     If Collision(picBox1, PictureBox) Then 
      ' Player is colliding - dont walk! 
      colliding = true 
     End If 
    End If 
Next 

If Not colliding Then 
    walk = 1 
    tmrWalk.Start() 
    picBox1.Top -= 5 
End If 

을, 우리는 추적을 유지하고, 충돌이 전혀 발생하지 않는 경우에만 운동을 할 수 있습니다. 당신이 이동하기 전에 당신이 충돌이 발생되지 않음을 알고 있다면 당신은 실제로 단지 당신의 성격을 이동할 수 있도록

편집 일반적으로 당신은 충돌에 대한 테스트해야합니다.

이동 후 충돌을 처리하기로 결정한 경우 이동 전 yoru 플레이어의 좌표를 캐시 한 다음 충돌이 발생한 경우 좌표를 저장된 값으로 재설정합니다.

게임 개발에서 충돌 처리에 대해 읽어보고 싶을 수 있습니다. 여기에 제시된 것보다 더 나은 해결책을 제시 할 수있는 훌륭한 튜토리얼이 많이 있습니다.

관련 문제