Java 游戏平台
我刚刚在unity和Game maker工作了两个月,所以我并不擅长这项工作。我有一个小问题。我有一个平台正在与主角发生冲突,现在可以工作了。但是如果我想添加两个或更多的平台,游戏就会失败。我现在在Game Maker Studio工作Java 游戏平台,java,2d,platform,game-maker,Java,2d,Platform,Game Maker,我刚刚在unity和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,o
//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;
}
//对输入做出反应
移动=左键+右键;
hsp=移动*移动速度;
如果(vsp<10)vsp+=grav;
if(地点会议(x,y+1,obj_平台)|地点会议(x,y+1,obj_平台1)){
vsp=按键跳跃*-跳跃速度;
}
//水平碰撞
if(地点会议(x+hsp,y,obj_平台)|地点会议(x+hsp,y,obj_平台1)){
而(!地点会议(x+标志(hsp),y,obj_平台)地点会议(x+标志(hsp),y,obj_平台1)){
x+=符号(hsp);
}
热休克蛋白=0;
}
x+=hsp;
//垂直碰撞
if(地点会议(x,y+vsp,obj_平台)|地点会议(x,y+vsp,obj_平台1)){
而(!地点会议(x,y+标志(vsp),obj_平台)|地点会议(x,y+标志(vsp),obj_平台1)){
y+=符号(vsp);
}
vsp=0;
}
y+=vsp;
//对角碰撞
if(地点会议(x+hsp,y+vsp,obj_平台)|地点会议(x+hsp,y+vsp,obj_平台1)){
而(!地点会议(x+符号(hsp)、y+符号(vsp)、obj_平台)地点会议(x+符号(hsp)、y+符号(vsp)、obj_平台1)){
x+=符号(hsp);
y+=符号(vsp);
}
热休克蛋白=0;
vsp=0;
}
我看不出我犯了什么错误,平台正常工作,但如果你跳到平台1上,整个游戏就会失败
提前谢谢 它可能会阻塞while循环。函数返回1表示正数,返回1表示负数,返回0表示0 如果GameMaker具有日志记录功能,或某种控制台输出,请在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。它可能会阻塞while循环。函数返回1表示正数,返回1表示负数,返回0表示0 如果GameMaker具有日志记录功能,或某种控制台输出,请在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