2017-05-09 12 views
1

저는 Game maker를 처음 접했고 기능에 문제가 있습니다.Surface Game Maker에 고집하는 공

나는 퐁과 같은 게임을 만들고 있는데, 공이 공 및 패들 동결의 맨 아래 (작은면, 얼굴이 아닌)의 꼭대기와 충돌 할 때 문제가 발생합니다.

공이 패들과 충돌하는 경우 유일한 코드는 수평 속도를 뒤집는 것입니다.

hspeed * = -1;

공이 위쪽과 접촉했기 때문에 수평 방향이 바뀌지 만 표면 속도가 변하지 않았으므로 표면과 계속 접촉하여 다시 뒤집어서 무한 루프.

나는 그런 공은 여전히 ​​하나의 프레임 이후에 접촉되었는지 감지하고 나는 또한 시도했습니다 수직 속도 (NO 성공)

을 반대로 알람을 설정하는 등, 그것을 해결하기 위해 여러 가지를 시도했습니다 볼 상단의 y 위치가 패들의 하단 y 위치와 같은지 확인하고 (반대의 경우도 마찬가지입니다) 참이면 수직 속도를 반대로합니다. 그러나 다시는 성공하지 못했습니다.

올바른 코드를 사용하면이 두 가지 방법이 모두 작동한다고 확신하지만 잘못 실행해야합니다.

공이 패들의 상단이나 하단과 충돌하면 멈추지 않고 이상적으로 수평 속도 대신 수직 속도를 뒤집을 수 있도록 어떤 방법을 사용해야합니까?

나는 이것이 간단한 해결책을 가지고 있다고 확신하지만, 나는 새로운 것을 가지고있다.

감사합니다.

답변

0

내 솔루션은 공이 패들과 충돌 할 때 인스턴스를 변경하는 것입니다. 현재 개체와 거의 동일한 개체를 만든 다음 충돌 이벤트를 제거하지만 역순으로 이동하도록 만들기 이벤트를 설정합니다. 공이 원하는 방향으로 움직이지만 붙어 있지는 않습니다. 그런 다음 빈 공간이 있는지 확인할 수 있습니다. 존재하는 경우 개체를 원래 볼로 다시 변경하십시오.

+0

나는이 간단한 것으로 다른 인스턴스를 만드는 것을 권장하지 않습니다. – Timtech

0

우선이 질문은 좋은 질문입니다. 나는 당신이 충돌을 어떻게 확인하고 있는지 알지 못한다. 그러나 충돌 이벤트 나 다른 것과는 달리 단계적 이벤트에서 그것을하고 있지만, 수평 충돌과 수직 충돌을 개별적으로 점검 할 수 있어야한다. 예를 들어 (패들 개체의 이름으로 OBJ 교체) :

if (position_meeting(x-1, y, obj) || position_meeting(x+1, y, obj)) { 
    //horizonal collision 
} 
if (position_meeting(x, y-1, obj) || position_meeting(x, y+1, obj)) { 
    //vertical collision 
} 

이것은 당신이 아마 모두 속도를 플립 할 것이다 경우 정확히 코너 안타 가장자리 케이스를, 검출 이점을 제공합니다.

충돌 이벤트를 사용하는 경우에도 볼의 x 값 (두 스프라이트 중심에 있다고 가정)이 {패들의 x 값에 너비를 더한 값 또는 빼기 값보다 작은 지 확인하기 만하면됩니다. }, 수직 충돌을 나타냅니다.