背景:
我在为我的复古Platformer重制项目获得正确的跳跃曲线时遇到问题。原始游戏适用于NES,玩家的速度存储在两个独立的部分中:一个字节代表整数,另一个字节代表小数部分。
重力以0.25 /帧的速率添加到播放器的Y速度。
玩家跳跃时,其Y速度设置为-4.64453125。其余的跃迁曲线留给重力。
随着玩家的上升,他的垂直速度以0.25 /帧的速率收敛到0。但是,当玩家的速度达到小于零的值时,速度会按照不同的模式变化。它遵循以下模式,而不是每帧稳定减少0.25:
[1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...]
它似乎与整数溢出有关。
数据:
这是原始数据的转储。这是速度表。
Jump Curve
Y-Hi Y-Lo Decimal Change/Frame
4 165 4.64453125 ?
4 101 4.39453125 -0.25
4 37 4.14453125 -0.25
3 229 3.89453125 -0.25
3 165 3.64453125 -0.25
3 101 3.39453125 -0.25
3 37 3.14453125 -0.25
2 229 2.89453125 -0.25
2 165 2.64453125 -0.25
2 101 2.39453125 -0.25
2 37 2.14453125 -0.25
1 229 1.89453125 -0.25
1 165 1.64453125 -0.25
1 101 1.39453125 -0.25
1 37 1.14453125 -0.25
0 229 0.89453125 -0.25
0 165 0.64453125 -0.25
0 101 0.39453125 -0.25
0 37 0.14453125 -0.25
-1 229 -1.89453125 1.75
-1 165 -1.64453125 -0.25
-1 101 -1.39453125 -0.25
-1 37 -1.14453125 -0.25
-2 229 -2.89453125 1.75
-2 165 -2.64453125 -0.25
-2 101 -2.39453125 -0.25
-2 37 -2.14453125 -0.25
-3 229 -3.89453125 1.75
-3 165 -3.64453125 -0.25
-3 101 -3.39453125 -0.25
-3 37 -3.14453125 -0.25
-4 229 -4.89453125 1.75
-4 165 -4.64453125 -0.25
-4 101 -4.39453125 -0.25
-4 37 -4.14453125 -0.25
-5 229 -5.89453125 1.75
-5 165 -5.64453125 -0.25
-5 101 -5.39453125 -0.25
-5 37 -5.14453125 -0.25
-6 229 -6.89453125 1.75
问题:
在我的游戏中,我无法达到这种效果。当速度小于零时,它会持续规则地降低0.25,而不是上述模式。与其将整个部分和小数部分分别存储,不如将它们一起存储在单个float中。
如何达到这种效果?
1
老实说,我只需要截取屏幕截图即可得出他的最大跳跃高度/长度(以像素为单位),然后调整您当前的功能,使其看起来尽可能的像。您说的不精确是故意的,所以这应该不会造成问题吗?
—
乔纳森·康奈尔
我认为您需要发布要更改速度的零件,并在代码上准确描述问题和需求。
—
Ali1S232 2011年
@Gajet什么?他确实准确地描述了问题。
—
Maik Semder 2011年
@maikSemder:我很好奇他如何实现物理引擎以根据他的代码提供解决方案。
—
Ali1S232 2011年
让我知道是否需要更多详细信息,我不想写一篇巨大的文章,因为担心我会得到tl; dr的回复。
—
Zack The Human