Articles of 浮点

什么导致了“脱离世界”,什么修复了?

很多早期的3D游戏出现了这样的问题,你会快乐地沿着它走,突然间一切都是黑色的,有一个看起来像你走过的场景的空心立面的岛屿。 因为你已经离开了这个世界。 我记得这对贝塞斯达软件公司来说是一个特殊而又长期存在的问题,虽然他们并不孤单。 自从我在野外看到它已经有一段时间了,所以看起来我们已经过去了。 我的问题是两部分: 1)这是什么原因造成的? (我的猜测是这是与多边形之间的浮点精度相关的接缝,与点模型化的字符位置相互作用,即地面块A在位置1.0结束,地面块B在位置0.9998处开始,并且微秒位置是0.99992,繁荣,你跌落世界,但这只是一个猜测。 2)它是如何得到修复的?

在Unreal中,C ++的float和FFloat32有什么不同?

我一直在努力学习UE4的一些更深层次的内容,并且在阅读许多示例代码和引擎的源代码基础的同时,我注意到有时人们(和源代码)使用标准的C ++ float原语,但有时使用UE4的习惯执行FFloat32 。 然后我很好奇:在使用虚幻编写游戏时,使用这两个选项有什么区别,当我们放弃标准C ++原语来支持引擎的实现时,可能会出现什么样的主要情况呢?

非整数速度值 – 是否有一个更清洁的方法来做到这一点?

通常我会希望使用像2.5这样的速度值来移动我的角色在基于像素的游戏中。 但是,如果我这样做,碰撞检测通常会更困难。 所以我最终做了这样的事情: moveX(2); if (ticks % 2 == 0) { // or if (moveTime % 2 == 0) moveX(1); } 每当我必须写下这些内容时,我都会畏惧内部,是否有更简洁的方式来移动非整数速度值的字符,还是会一直这样做呢?

在浮点非确定性面前,确定性游戏是如何实现的?

为了让RTS成为一个networking游戏,我已经看到了许多答案,让游戏变得完全确定。 那么您只需将用户的操作转移到对方,并在显示下一帧之前将所显示的内容稍微滞后一点,以locking每个人的input。 那么像单位的位置,健康等等的东西不需要不断地在networking上更新,因为每个玩家的模拟将是完全一样的。 我也听到了同样的事情,build议重放。 但是,由于浮点计算在机器之间或甚至在同一机器上的相同程序的不同编译之间是不确定的 ,这真的有可能吗? 我们如何防止这个事实在整个游戏中造成玩家(或回放)之间的微小差异? 我听到一些人build议完全避免使用浮点数,并用int来表示一个小数的商,但这对我来说听起来并不实际,例如,如果我需要一个angular度的余弦,该怎么办呢? 我是否真的需要重写整个math库? 请注意,我主要对C#感兴趣,就我所知,C#在这方面与C ++有完全相同的问题。