2017-03-27 111 views
1

我只是在团结和游戏制造者身上工作了两个月,所以我并不擅长。我有一个小问题。我有一个与主角相撞的平台,现在可以工作。但是如果我想添加两个或更多的平台,游戏就会陷入困境。我现在使用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. 
    } 
} 

我知道这不是很有效的方法,但作为通用记得常常在调试方面可怕的IDE。