有一件事情一直困扰着我,那就是如何在平台游戏机中实现“人造脉冲”跳跃。如果您不知道我在说什么,请考虑一下《马里奥》,《柯比》和《洞穴物语》中的《名言》。他们有什么共同点?好吧,跳跃的高度取决于按住跳跃按钮的时间。
知道这些角色的“冲动”并不是像实际物理学中那样在跳动之前就已经建立的,而是在空中时建立的,也就是说,您可以很好地将手指抬起至最大高度的中途,即使在它和句号之间的减速;这就是为什么您可以轻松地跳一跳并保持跳远的原因-我对它们如何保持轨迹成弧形着迷。
我当前的实现方式如下:
按下跳转按钮时,重力将关闭,并且化身的Y坐标系将因重力的恒定值而减小。例如,如果事物跌落到每刻度Z个单位,它将增加每勾Z个Z单位。
释放按钮或达到限制后,虚拟化身会减速,使其覆盖X个单位,直到其速度达到0;一旦完成,它就会加速直到其速度与重力匹配-坚持这个例子,我可以说它从0加速到Z单位/刻度,同时仍然覆盖X单位。
但是,此实现会使跳跃变得过于对角,并且除非化身的速度快于重力,否则这将使其在我当前的项目中变得太快(它在大约每跳动4像素处移动,而重力在每跳动10像素处移动) 40FPS的帧率),它也使它比水平更垂直。那些熟悉平台游戏的人会注意到,角色的弧形跳跃几乎总是使他们能够跳得更远,即使它们的速度不如游戏的重力那么快;如果游戏不正确,即使玩法不正确,也会证明自己是正确的。非常违反直觉的。我知道这一点是因为我可以证明我的实现非常烦人。
有没有人尝试过类似的机制,甚至可能成功了?我想知道这种平台游戏跳跃的背后是什么。如果您以前没有任何经验,并且想尝试一下,那么请不要尝试纠正或增强我所解释的实现,除非我采取了正确的方法-尝试从以下方面弥补您的解决方案刮。我不在乎您是否使用重力,物理学或其他方法,只要它能显示出这些伪脉冲的工作原理即可。
另外,我希望它的显示避免特定语言的编码。例如,为我们分享一个C ++示例或Delphi ...就像我在我的项目中使用XNA框架一样,并且不介意C#的东西,我没有太多的耐心来阅读别人的代码,某些使用其他语言的游戏开发人员可能会对我们在此处获得的成就感兴趣,因此不要介意使用伪代码。
预先谢谢你。