c - 我将如何从不断变化的值中存储一个值,并将存储的值与 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;
}
解决方案
伤害应该取决于撞击地面的速度,而不是坠落的高度,尽管它们之间存在关系。
关系不是 1:1,假设有人开始以已经向下的速度下落,例如被向下抛。或者另一个方向,速度可能会被降落伞之类的东西减慢。
在代码内部,这转化为具有速度(至少是垂直分量)的变量。为加速增加它,为任何破坏效果减少它(更准确地说:减少破坏效果增加它)。
当您撞到地面时,根据该点的速度计算伤害。
在没有投掷角色和降落伞的情况下,引入该速度变量也将解决您的问题。然后它是加速度的累加器,非常接近下降距离的累加器 - 只是更容易更新。您只需要通过每转/帧/动画步骤的重力加速度来增加它。
这意味着扭转计算。与其尝试从先前的高度和当前高度计算速度/总高度/伤害,不如从先前的高度 + 速度计算当前高度。如果您查看之前如何计算当前高度表格,您会注意到您已经在那里做了类似的事情(假设我很确定您做了,尽管在显示的代码中没有看到,比如 height=height-speedconstant) .
推荐阅读
- java - JNA - 从返回的指向 DLL 的指针调用本机 C++ 函数
- php - PHP 7.2 create_function() 已弃用
- ios - 请求访问麦克风的简单播放
- php - 构建流体界面时的类型转换问题
- html - 页面加载时元素正在移动 - CSS问题?
- sql-server - 简单查询生成错误 3078“Microsoft Jet 数据库引擎找不到输入表或查询”
- virtual-machine - qemu-img 信息:磁盘大小与虚拟大小 - 误解
- oracle - 如何为来自 2 个不同的 oracle 数据库的数据编写相交查询
- web-services - Artifactory OSS 6.5.2 - 无法从网络上的服务器连接到 UI
- java - Install4j:Unix 启动器脚本片段使用安装程序变量