游戏平台

时间:2017-03-27 12:10:43

标签: java 2d platform game-maker

我只是在团结和游戏制作者工作了两个月,所以我并不擅长它。我有一个小问题。我有一个与主角相撞的平台,现在可以正常工作。但是,如果我想添加两个或更多平台,游戏就会停滞不前。我现在在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,那么整个游戏都会停滞不前。

提前致谢!

1 个答案:

答案 0 :(得分:0)

它可能会停留在while循环中。符号函数返回1表示正数,-1表示负数,0表示0。

如果Game Maker具有loggging功能或某种控制台输出,请在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。