请问如何实现按键加减速,放开恢复速度的效果?
gamemaker吧
全部回复
仅看楼主
level 2
网行者_ 楼主
需要实现的目的:
按住shift时,变量a,b每过1秒进行一次a-=1,b-=0.5,直到a=1.5,b=0.5
放开shift时,变量a,b停止增减,变量a,b每过一秒进行一次a+=0.5,b+=0.25, 直到a=7.5 b=3.75
2018年07月06日 11点07分 1
level 2
网行者_ 楼主
Create:
State = "move"
Step:
//行走
var a = 7.5; //x移动值
var b = 3.75; //y移动值
//匍匐
var c = 4.5; //x移动值
var d = 2.25; //y移动值
//////////////////////////////////////////////////////////////////////////////////
//移动状态
if state = "move"
{
x+=2; //滑落效果
y+=1; //滑落效果
//不动
ifnot keyboard_check(vk_right)
andnot keyboard_check(vk_left)
andnot keyboard_check(ord("A"))
andnot keyboard_check(ord("D"))
{
sprite_index= magentalittle_stand;
}
//左上方向移动
ifkeyboard_check(ord("A")) || keyboard_check(vk_left)
{
sprite_index= magentalittle_walk;
image_speed= 1;
x-= a; //需要改变的值
y-= b; //需要改变的值
//移动时按下相反的按钮
ifkeyboard_check(vk_right) || keyboard_check(ord("D"))
{
x+= a; //需要改变的值
y+= b; //需要改变的值
}
//行走射击
//需要实现的目的:
//按住shift时,变量a,b每过1秒进行一次a-=1,b-=0.5,直到a=1.5,b=0.5
//放开shift时,变量a,b停止增减,变量a,b每过一秒进行一次a+=0.5,b+=0.25, 直到a=7.5 b=3.75
ifkeyboard_check(vk_lshift) || keyboard_check(vk_rshift)
{
state= "walkshoot";
}
}
//站立射击
//目的同上
ifkeyboard_check(vk_lshift) || keyboard_check(vk_rshift)
{
state= "shoot";
}
//加减速代码
//加入后没有任何影响,按shift不能减速
if(keyboard_check(vk_lshift)) ||keyboard_check(vk_rshift)
{
a-= 1;
if(a<1.5){a=1.5}
b-=0.5
if(b<0.5){b=0.5}
}
else
{
a+= 0.5;
if(a>7.5){a=7.5}
b+= 0.25
if(b>3.75){b=3.75}
}
//趴下
ifkeyboard_check(vk_down) || keyboard_check(ord("S"))
{
state= "crawl";
}
}
//////////////////////////////////////////////////////////////////////////////////
if state = "crawl"
{
x+= 2;
y+= 1;
sprite_index = magenta_tilt_left;
ifkeyboard_check(vk_left) || keyboard_check(ord("A"))
{
x -= 4.5;
y -= 2.25;
if keyboard_check(vk_right) ||keyboard_check(ord("D"))
{
x += 4.5;
y += 4.5;
}
}
ifkeyboard_check(vk_up) || keyboard_check(ord("W"))
{
state = "move";
}
}
//////////////////////////////////////////////////////////////////////////////////
if state = "shoot"
{
sprite_index= magenta_shoot;
image_speed= 1;
x+= 10; //记得测试成功后改为40 后坐力
y+= 5 ; //记得测试成功后改为20
}
//////////////////////////////////////////////////////////////////////////////////
if state = "walkshoot"
{
sprite_index= magenta_walkshoot;
image_speed= 1;
x+= 10;//记得测试成功后改为40
y+= 5; //记得测试成功后改为20
动画结束:
ifstate == "shoot"
{
state = "move"
}
ifstate = "walkshoot"
{
state = "move"
}
2018年07月06日 11点07分 2
level 12
问题在于var声明的是临时变量,当执行完step后将被删除。就算去掉var,每step开始就使a,b,c,d为特定值,这样即使在下面对这些值更改,也是没用的,因为每step开始这些值又变回来了。应当在create中写a=xx,b=xx,......,然后在step中更改。
2018年07月06日 11点07分 3
按你说的做了但是还有问题: 按住shift只减一次速,要按多次才能减到最小值,同时加速减速效果抵消了 //尝试将else的内容转移到alarm[1]中,减速度生效,加速度没反
2018年07月06日 15点07分
尝试将加减速度代码中的else的内容。。。。。。
2018年07月06日 15点07分
@网行者_ 没反应
2018年07月06日 15点07分
level 2
网行者_ 楼主
if keyboard_check(vk_lshift) || keyboard_check(vk_rshift)
{
state = "shoot";
//alarm[0]= 90;
a-= 3;
if(a<1){a=1}
b-=1.5;
if(b<0.5){b=0.5}
}
else
{
alarm[1]= 60;
a+=0.2;//减小此值,仍然抵消
if(a>8){a=8}
b+= 0.1;//减小此值,仍然抵消
if(b>4){b=4}
}
2018年07月06日 15点07分 4
alarm忘了加注释了
2018年07月06日 15点07分
level 12
因为当lshift或rshift按下是时state发生改变,变为shoot,而abcd的变化是当state为move时才能发生
2018年07月07日 09点07分 5
因此只发生一次减速
2018年07月07日 09点07分
我的shoot state有做动画结束事件,不影响
2018年07月09日 05点07分
回复 圣之烁 :没有看到,哈哈[滑稽]
2018年07月09日 10点07分
level 2
网行者_ 楼主
已经搞定,其实原因主要是两个,a,b或是speed 会不会被变化后的值覆盖,以及set中alarm会无限次重置,无法执行,这个只要提前到create中就行了
2018年07月09日 05点07分 6
1