2017-03-27 14 views
1

저는 화합과 게임 제작자로 2 개월을 일하고 있습니다. 그래서 나는 그것에 익숙하지 않습니다. 나는 작은 질문이있다. 나는 maincharacter와 충돌하고있는 하나의 플랫폼을 가지고있다. 그러나 두 개 이상의 플랫폼을 추가하려면 게임이 멈 춥니 다. 나는 Game Maker Studio와 함께 일하고 있습니다.게임용 플랫폼

//React to inputs 
move = key_left + key_right; 
hsp = move * movespeed; 
if (vsp < 10) vsp += grav; 

if (place_meeting(x,y+1,obj_platform) || place_meeting(x,y+1,obj_platform1)){ 
    vsp = key_jump * -jumpspeed; 
} 

//Horizontal collision 
if (place_meeting(x+hsp,y,obj_platform) || place_meeting(x+hsp,y,obj_platform1)){ 
    while (!place_meeting(x+sign(hsp),y,obj_platform) || place_meeting(x+sign(hsp),y,obj_platform1)){ 
     x += sign(hsp); 
    } 
    hsp = 0; 
} 
x += hsp; 

//Vertical collision 
if (place_meeting(x,y+vsp,obj_platform) || place_meeting(x,y+vsp,obj_platform1)){ 
    while (!place_meeting(x,y+sign(vsp),obj_platform) || place_meeting(x,y+sign(vsp),obj_platform1)){ 
     y += sign(vsp); 
    } 
    vsp = 0; 
} 
y += vsp; 

//Diagonal collision 
if(place_meeting(x+hsp, y+vsp, obj_platform) || place_meeting(x+hsp,y+vsp,obj_platform1)){ 
    while(!place_meeting(x+sign(hsp), y + sign(vsp),obj_platform) || place_meeting(x+sign(hsp), y + sign(vsp),obj_platform1)){ 
     x+= sign(hsp); 
     y+= sign(vsp); 
    } 
    hsp = 0; 
    vsp = 0; 
} 

내가 만들고있어 실수가 표시되지는 플랫폼이해야처럼 작동하지만 PLATFORM1에 뛰어 경우, 전체 게임 stucks.

미리 감사드립니다.

답변

0

while 루프에 걸렸을 가능성이 큽니다. 부호 함수는 양수는 1, 음수는 -1, 0은 0을 반환합니다.

Game Maker에 로깅 기능이나 콘솔 출력이 있으면 while 루프에 내용을 기록하십시오. 또는, 그런 것을 시도하지 않는 경우

counter = 0; 
while(!place_meeting(x+sign(hsp), y + sign(vsp),obj_platform) || place_meeting(x+sign(hsp), y + sign(vsp),obj_platform1)){ 
    counter+= 1; 
    x+= sign(hsp); 
    y+= sign(vsp); 
    if (counter>100){ 
     //do something visible, for example teleport player. 
    } 
} 

을 나는 그것이 매우 효과적인 방법이 아니다 알고 있지만, GM 나는 항상 디버깅의 측면에서 끔찍한 IDE가 있었다 기억한다.