gamemaker吧 关注:13,648贴子:95,185
  • 3回复贴,共1

请问如何实现按键加减速,放开恢复速度的效果?

取消只看楼主收藏回复

需要实现的目的:
按住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


IP属地:广东1楼2018-07-06 19:39回复
    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"
    }


    IP属地:广东2楼2018-07-06 19:40
    回复
      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}
      }


      IP属地:广东4楼2018-07-06 23:06
      收起回复
        已经搞定,其实原因主要是两个,a,b或是speed 会不会被变化后的值覆盖,以及set中alarm会无限次重置,无法执行,这个只要提前到create中就行了


        IP属地:广东6楼2018-07-09 13:38
        回复