角色跳跃高度不受控制
Jumping Height of character is not controlled
我们正在尝试制作一个马里奥 game.However 如果我们举起它,使用的角色会不断上升 key.Unlike 在某个马里奥游戏中它会在某个 height.We刚开始学习Gml。请帮助我们 thing.We 上传了我们为跳跃和移动制作的脚本。
hsp 和 vsp 变量用于水平和垂直速度 respectively.grav 用于设置重力。
{
var hsp;
var vsp;
var grav;
var grounded;
hsp = 0;
vsp = 0;
grav = 5;
grounded = 0;
key_right = keyboard_check_direct(vk_right);
key_left = keyboard_check_direct(vk_left);
key_up = keyboard_check_direct(vk_up);
if(key_right)
{
if(hsp < 3)
{
hsp += 5;
}
}
if(key_left)
{
if(hsp > -3)
{
hsp -= 5;
}
}
if(key_up)
{
vsp = -20;
}
vsp += grav;
if(place_meeting(x + hsp, y, obj_wall))
{
while(!place_meeting(x + sign(hsp), y, obj_wall))
{
x += sign(hsp);
}
hsp = 0;
}
x += hsp;
if(place_meeting(x, y + vsp, obj_wall))
{
while(!place_meeting(x, y + sign(vsp), obj_wall))
{
y += sign(vsp);
}
if(sign(vsp) == 1)
{
grounded = 1;
}
vsp = 0;
}
else
grounded = 0;
y += vsp;
}
您的问题出在代码上:
if(key_up)
{
vsp = -20;
}
vsp += grav
每一步,如果按下向上键,执行脚本的对象将向上移动 20px。然后它将字符向下移动 grav
像素。由于 grav
始终为 5,因此只要按下向上键,就会产生 (-20 + 5) = -15
的净位移。这就像你不断地(只要按下向上键)每一步都在跳跃,而不是只跳一次然后让重力来完成它的工作。
我想你想要的是只有当你身下有东西(跳下)时才跳。为此,只需在 if
语句中添加另一个条件(检查您是否在某物之上),就像这样...
if ( key_up and place_meeting(x, y+1, obj_wall) )
{
vsp = -20;
}
vsp += grav
现在只有站着才能跳,在半空中重力会往下拉
我们正在尝试制作一个马里奥 game.However 如果我们举起它,使用的角色会不断上升 key.Unlike 在某个马里奥游戏中它会在某个 height.We刚开始学习Gml。请帮助我们 thing.We 上传了我们为跳跃和移动制作的脚本。 hsp 和 vsp 变量用于水平和垂直速度 respectively.grav 用于设置重力。
{
var hsp;
var vsp;
var grav;
var grounded;
hsp = 0;
vsp = 0;
grav = 5;
grounded = 0;
key_right = keyboard_check_direct(vk_right);
key_left = keyboard_check_direct(vk_left);
key_up = keyboard_check_direct(vk_up);
if(key_right)
{
if(hsp < 3)
{
hsp += 5;
}
}
if(key_left)
{
if(hsp > -3)
{
hsp -= 5;
}
}
if(key_up)
{
vsp = -20;
}
vsp += grav;
if(place_meeting(x + hsp, y, obj_wall))
{
while(!place_meeting(x + sign(hsp), y, obj_wall))
{
x += sign(hsp);
}
hsp = 0;
}
x += hsp;
if(place_meeting(x, y + vsp, obj_wall))
{
while(!place_meeting(x, y + sign(vsp), obj_wall))
{
y += sign(vsp);
}
if(sign(vsp) == 1)
{
grounded = 1;
}
vsp = 0;
}
else
grounded = 0;
y += vsp;
}
您的问题出在代码上:
if(key_up)
{
vsp = -20;
}
vsp += grav
每一步,如果按下向上键,执行脚本的对象将向上移动 20px。然后它将字符向下移动 grav
像素。由于 grav
始终为 5,因此只要按下向上键,就会产生 (-20 + 5) = -15
的净位移。这就像你不断地(只要按下向上键)每一步都在跳跃,而不是只跳一次然后让重力来完成它的工作。
我想你想要的是只有当你身下有东西(跳下)时才跳。为此,只需在 if
语句中添加另一个条件(检查您是否在某物之上),就像这样...
if ( key_up and place_meeting(x, y+1, obj_wall) )
{
vsp = -20;
}
vsp += grav
现在只有站着才能跳,在半空中重力会往下拉