首页 > 解决方案 > 我将如何从不断变化的值中存储一个值,并将存储的值与 C 中的变化值进行比较?

问题描述

所以我想弄清楚一个玩家在游戏中摔倒了多少,然后弄清楚应该受到多少伤害。我这样做是通过尝试存储玩家不在地面时的当前 y 位置,获取新的 y 位置然后用旧的位置减去新的位置。问题是 oldy 总是设置为当前的 y,我不知道如何将它分开。我对C没有很多经验,所以任何帮助将不胜感激

if (player->grounded==false){
player->blocksfallen=player->position.y-player->oldy;
player->oldy=player->position.y;
} else {
    player->blocksfallen=0;
}

标签: c

解决方案


伤害应该取决于撞击地面的速度,而不是坠落的高度,尽管它们之间存在关系。
关系不是 1:1,假设有人开始以已经向下的速度下落,例如被向下抛。或者另一个方向,速度可能会被降落伞之类的东西减慢。

在代码内部,这转化为具有速度(至少是垂直分量)的变量。为加速增加它,为任何破坏效果减少它(更准确地说:减少破坏效果增加它)。
当您撞到地面时,根据该点的速度计算伤害。
在没有投掷角色和降落伞的情况下,引入该速度变量也将解决您的问题。然后它是加速度的累加器,非常接近下降距离的累加器 - 只是更容易更新。您只需要通过每转/帧/动画步骤的重力加速度来增加它。

这意味着扭转计算。与其尝试从先前的高度和当前高度计算速度/总高度/伤害,不如从先前的高度 + 速度计算当前高度。如果您查看之前如何计算当前高度表格,您会注意到您已经在那里做了类似的事情(假设我很确定您做了,尽管在显示的代码中没有看到,比如 height=height-speedconstant) .


推荐阅读