간단한 게임을 만들고 있습니다. 나는 화살표 키와 불로 나의 캐릭터를 움직이게 만들었다. 나는 그림 상자 인지도에 벽을 추가했다. 나는이 같은 충돌을 감지 할 수 있었다 :충돌 감지 및 정지 동작
private void timer6_Tick(object sender, EventArgs e){
foreach (PictureBox pic in brick){
if (pic.Bounds.IntersectsWith(pb_sprite.Bounds)){
Console.WriteLine("Colision!");
switch (rotation){
case "up":
canup = false;
candown = true;
canleft = true;
canright = true;
break;
case "down":
canup = true;
candown = false;
canleft = true;
canright = true;
break;
case "left":
candown = true;
canup = true;
canleft = false;
canright = true;
break;
case "right":
candown = true;
canup = true;
canleft = true;
canright = false;
break;
}
}
else
{
Console.WriteLine("No colision?!");
}
}
}
예상대로 작동하지만 곧 "Colision! echo는 괜찮습니다. 이것은 충돌이 발생할 때 캐릭터가 향하고 있던 방향으로의 움직임도 멈 춥니 다. 것은 나가이 bool 중 하나가 동일한 방향에서 다시 움직이기 위하여 나의 특성을 막는 틀린 체재 한 충돌을 나가는 때이다. 나는이 브룩들을 모두 다른 브랜치에 설정하려고했지만 콜리 전이 있더라도 5 개의 벽이 있기 때문에 다른 브랜치는 5 번에서 4 번 실행됩니다. 어떤 벽이나 벽이 없는지를 확인하는 일종의 "any"함수가 필요합니다. 한 순간에 맞았다.
당신은 당신이 당신의'Timer' 내부보다는 액형이 있고 충돌을 감지 할 경우, 당신이 할 -assuming 당신의'movement' 기능에 충돌을 확인할 수 있습니다 그 운동을 허용하지 마라. – uTeisT
다른 접근법을 고려하십시오 : 사용자가 * 명령 *을 입력하십시오. 그런 다음 게임 컨텍스트에서 명령을 평가하고 * 명령을 * 승인 * 또는 * 거부 *합니다. 승인되면 문자가 표시된 방향으로 이동합니다. 거부되면 아무 일도 일어나지 않습니다. 이 패턴을 사용하여 게임을 구성하면 많은 문제가 사라질 것입니다. –