Questions tagged «floating-point»

9
面对浮点非确定性,确定性游戏怎么可能?
为了使游戏像RTS网络游戏一样,我在这里看到了许多答案,这些建议建议使游戏完全具有确定性。那么您只需要彼此转移用户的操作,并稍微延迟所显示的内容,以便在呈现下一帧之前“锁定”每个人的输入。这样,诸如单位位置,健康状况之类的事情就不需要通过网络不断更新,因为每个玩家的模拟都是完全相同的。我也听到过建议进行重放的同一件事。 但是,由于浮点计算在机器之间,甚至在同一机器上同一程序的不同编译之间是不确定的,真的可以这样做吗?我们如何防止这一事实在整个游戏中引起波动的玩家(或重播)之间产生微小差异? 我听说有人建议完全避免使用浮点数int来表示小数的商,但这对我来说并不实用-例如,如果我需要取一个角度的余弦值怎么办?我是否真的需要重写整个数学库? 请注意,我主要对C#感兴趣,据我所知,在这方面,C#与C ++存在完全相同的问题。

8
如何执行确定性的物理模拟?
我正在创建一个涉及刚性物体的物理游戏,玩家可以在其中移动零件和零件来解决难题/地图。游戏中一个非常重要的方面是,当玩家开始进行仿真时,无论其操作系统,处理器等如何,它在任何地方都可以运行。 存在很多复杂性的空间,并且模拟可能会运行很长时间,因此,对于浮点运算,物理引擎必须完全确定,这一点很重要,否则解决方案似乎可以在一个玩家的机器上“解决”并在另一个上“失败”。 如何在游戏中获得这种确定性?我愿意使用各种框架和语言,包括Javascript,C ++,Java,Python和C#。 Box2D(C ++)以及其他语言的等效语言吸引了我,因为它似乎可以满足我的需求,但是它缺乏浮点确定性,尤其是对于三角函数。 到目前为止,我所看到的最好的选择是Box2D的Java等效项(JBox2D)。它似乎通过使用StrictMath而不是Math用于许多操作来尝试浮点确定性,但是由于我尚未构建游戏,因此尚不清楚此引擎是否可以保证我需要的一切。 是否可以使用或修改现有引擎以满足我的需求?还是我需要自行构建引擎? 编辑:如果您不关心为什么有人需要这样的精度,请跳过本文的其余部分。发表评论和回答的人似乎都认为我正在寻找不该做的事情,因此,我将进一步解释游戏的工作原理。 给玩家一个难题或关卡,其中包含障碍物和目标。最初,模拟未运行。然后,他们可以使用提供给他们的零件或工具来构建机器。一旦按下开始,模拟就会开始,并且他们不再可以编辑其机器。如果机器解决了地图问题,则玩家已经击败了关卡。否则,他们将必须按Stop(停止)按钮,更换机器,然后重试。 一切都需要确定性的原因是因为我计划通过记录每台机器的位置,大小和旋转,来生成将每台机器(一组试图解决一个关卡的零件和工具)映射到xml或json文件的代码。这样,玩家就可以共享解决方案(由这些文件表示),以便他们可以验证解决方案,相互学习,举行比赛,合作等等。当然,大多数解决方案,尤其是简单或快速的解决方案不会因为缺乏确定性而受到影响。但是解决真正困难水平的缓慢或复杂的设计可能会出现,而那些可能会是最有趣且值得分享的设计。

3
非整数速度值-是否有更干净的方法可以做到这一点?
通常,我会希望使用速度值(例如2.5)在基于像素的游戏中移动角色。但是,如果这样做,碰撞检测通常会更加困难。所以我最终做了这样的事情: moveX(2); if (ticks % 2 == 0) { // or if (moveTime % 2 == 0) moveX(1); } 每当我不得不写那封信时,我都会畏缩一次,是否有一种更清洁的方式来移动具有非整数速度值的角色,或者我会永远坚持这样做吗?

1
在虚幻引擎中,C ++的float和FFloat32有什么区别?
我一直在尝试学习UE4的更深层次的内容,在阅读许多示例代码以及引擎的源代码时,我注意到有时人们(包括源代码)使用标准C ++ float原语,但有时使用UE4的自定义实现FFloat32。 然后我很好奇:用Unreal编写游戏时,使用这两个选项有什么区别?可能应该放弃标准C ++原语以支持引擎实现的主要情况是什么?

3
是什么导致了“掉出世界”,又有什么解决办法?
许多早期的3D游戏都存在一个问题,即您会快步走来走去,突然间一切都变得黑了,岛上看起来像是您走过的场景的空心立面外壳,一直爬到远处。因为你已经脱离了世界。我记得对于Bethesda Softworks来说,这是一个特殊且长期存在的问题,尽管他们并不孤单。自从我在野外看到它已经有一段时间了,所以看来我们已经过去了。我的问题分为两部分: 1)是什么原因造成的?(我的猜测是,这与多边形之间与浮点精度相关的接缝有关,并与点建模的字符位置进行交互,例如,地板块A在位置1.0处结束,地板块B在位置0.9998处开始,并且一微秒内,您的位置是0.99992,然后繁荣,您就跌入了世界,但这只是个猜测。) 2)它是如何修复的?

3
使用float可以使最大的“相对”水平是多少?
就像在《地牢围攻》和KSP等游戏中所演示的那样,由于浮点的工作原理,足够大的级别将开始出现故障。您不能在不损失精度的情况下将1e-20添加到1e20。 如果选择限制关卡的大小,如何计算对象开始变得不稳时可以移动的最低速度?

5
如何将Bresenham的线算法推广到浮点端点?
我正在尝试结合两件事。我正在写一个游戏,我需要确定与浮点端点在一条线上的网格正方形。 此外,我需要它包括它碰到的所有网格正方形(即不仅是布雷森纳姆的线条,而且是蓝色的线条): 有人可以向我提供有关该操作方法的任何见解吗?显而易见的解决方案是使用朴素的行算法,但是有没有更优化的东西(更快)?

1
浮点精度(fp:precise vs.fp:fast)
在C或C ++中,浮点精度的编译器选项是否真的在现实世界(小型/独立)游戏中有所作为? 根据我的观察,设置fp:fast的速度比fp:precise快很多倍,据我在此处的理解(/programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-encounter),两个编译器选项之间的精度差仅从浮点数的第16位开始变化。 在使用fp:fast进行2D或3D游戏时,有人遇到过一个例子吗? 编辑:为澄清起见,我并不是在问浮点值本身的精度(即,浮点数,双精度数和小数)。仅关于与编译器选项有关的精度。
10 c++  c  floating-point 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.