译文:Gamemaker Studio系列:2D平台游戏的输入缓冲
作者:Case Portman(@Studio Thunderhorse, 独立游戏 Flynn: Son of Crimson的开发者)
翻译:highway★
“”我按了跳!!
我TM按了跳键,我C%^&#@%#@&*,
你TM倒是跳啊!!!,我%#^@&!"
耳熟么?我注意到很多2D平台游戏手感很好......但是也有很多游戏的手感挺糟的。
2D平台中对手感比较重要的两个东西,一个是“输入缓冲”(input buffering),还有一个是它的哥们儿“土狼时间 ”(coyote time)。
土狼时间是什么呢?就是当玩家走出平台边缘,跳键按得太晚,但是跳跃仍然有效。这是2D平台游戏开发的一个术语。(译注:当然中文搜索基本上是搜不到的,如果你感兴趣,可以google一下,gamasutra上有一些关于跳跃的开发技巧文章会有更详细的解释。)
下面,咱们说说到底什么是输入缓冲。
输入缓冲(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帧,我们的跳跃也会有效,很酷吧?只需几行代码,我们就能让我们的跳跃响应更快。输入缓冲可不是这一个用途,你可以将它添加到你任何喜欢的东西里,如攻击,躲闪,甚至导航菜单。希望这个迷你教程有所帮助!
(转发自:原日志地址)