GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

142 信息 436 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

译文:Gamemaker Studio系列:2D平台游戏的输入缓冲

highway★ 2018-11-08

作者:Case Portman(@Studio Thunderhorse, 独立游戏 Flynn: Son of Crimson的开发者)

翻译:highway★

“”我按了跳!!
                      我TM按了跳键,我C%^&#@%#@&*,
                                        你TM倒是跳啊!!!,我%#^@&!"


耳熟么?我注意到很多2D平台游戏手感很好......但是也有很多游戏的手感挺糟的。

2D平台中对手感比较重要的两个东西,一个是“输入缓冲”(input buffering),还有一个是它的哥们儿“土狼时间 ”(coyote time)。

土狼时间是什么呢?就是当玩家走出平台边缘,跳键按得太晚,但是跳跃仍然有效。这是2D平台游戏开发的一个术语。(译注:当然中文搜索基本上是搜不到的,如果你感兴趣,可以google一下,gamasutra上有一些关于跳跃的开发技巧文章会有更详细的解释。)

下面,咱们说说到底什么是输入缓冲。

Image title

输入缓冲(Input Buffering)

这个术语用于给输入一个指令(在我们的例子中,按一个按钮)以保留在内存中,直到它能够执行这个指令。最好的例子是在很短的时间内,让玩家可以按下跳跃按钮,一旦他们落地,角色就会跳跃。

让我们通过使用简单的2D平台游戏实现一下上面提到的东西。如果你已经实现了你玩家跳跃代码,那么你很可能是这么做的:“如果玩家在地上 -> 那就可以跳 -> 跳”,这是一个完美的开始,我们现在要做的就是简单的洗洗牌~

//Player跳跃代码

if place_meeting(x, y+1, objSolid)      //检测player是否在地上,注:当然你也可以用脚本
{
    if keyboard_check_pressed(vk_space) //按下空格键
        vspeed = -5;                    //跳起
}

译注:教程这里用vspeed只是为了省事儿,建议自定义速度变量

我们首先要在什么都没开始之前声明两个变量,buffer_counter和buffer_max,后面我可以对其进行调整。

在create事件中加上:

buffer_counter = 0 //
buffer_max = 10   //

接下来我们要改一下跳跃代码,加上上面的变量:

//Player跳跃
if (buffer_counter < buffer_max)
{
    buffer_counter +=1;    //每帧递增

    if place_meeting(x, y+1, objSolid)  //检测player是否在地上
        vspeed = -5;                    //跳起
}

我们现在加上触发跳缓冲的按钮。你可以自己选个按键,我在这用了空格键。在step事件中的任何位置添加它,我建议接近上面的代码以保持整洁。

//Player跳跃
if (buffer_counter < buffer_max)
{
    buffer_counter +=1;                 //计数器每帧递增

    if place_meeting(x, y+1, objSolid)  //检测player是否在地上
        vspeed = -5;                    //跳起
}

//Player跳跃操作
if keyboard_check_pressed(vk_space)     //按下空格键
    buffer_counter = 0;                 //重置缓冲计数器

WA-啦!现在,即使你在降落前按下跳跃按钮达10帧,我们的跳跃也会有效,很酷吧?只需几行代码,我们就能让我们的跳跃响应更快。输入缓冲可不是这一个用途,你可以将它添加到你任何喜欢的东西里,如攻击,躲闪,甚至导航菜单。希望这个迷你教程有所帮助!

(转发自:原日志地址

近期喜欢的会员

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册