2011-01-31 45 views
0

我想在一个项目中实现一个游戏录制功能,该功能只会在关卡开始时记录玩家输入和RNG的种子。然后,我可以拍摄这些记录并在我的电脑上播放,以便测试它的有效性。不同系统上的浮点和数学精度

我只关心可能出现在不同的Flash Player版本,操作系统或CPU(或其他可能受影响的)之间的一些数字差异。该项目将写入Flash Player 10.0.0+。我所关心的是什么东西:

  • 数字运算:乘,除,位操作(可能还有位移);加减; modulo
  • Math class:sin,cos and atan2;四舍五入
  • localToGlobal/globalToLocal用旋转和缩放

我不会用这样的东西则hitTest,getObjectsUnderPoint,hitTestPoint,的getBounds等等,所有的碰撞将是几何。

那么,有没有可能使用上面提到的任何指出的东西在不同的系统上产生不同的结果?如果是这样,我能做些什么来避免它们?

回答

0

这是非常不可能的(尽管可能),在不同的计算机上,事情将以明显不同的方式表现。即使他们这样做了,这将是一件非常罕见的事情,不是我会推荐担心的事情,除非它对游戏性至关重要。

+0

不是用于游戏玩法,而是用于检查用户是否在作弊,并且很难检查如果由于某些Floats相关的不兼容问题而导致玩家在开始时掉到坑中而不是从最后一个半像素跳下来,从而有效地打破了整个重播过程,并使我无法验证:)。 – Maurycy 2011-01-31 17:59:44

+0

我相信这些事件会非常罕见,不会产生影响。我会建立引擎,而不是现在担心它,当你完成了多次测试并确保玩家在实际游戏和模拟中结束于相同位置(在0.01单位内)时进行测试。如果他们不这样做,那么你可以将问题孤立起来,但是如果四舍五入的数字(双精度,64位)出现,我会感到非常惊讶。 – StapleGun 2011-01-31 18:06:19

+0

我也怀疑,但我了解到,有时候相信你的直觉,从未有过测试过的事情会导致重大问题。我主要关心的是三角函数。 – Maurycy 2011-02-02 12:32:32

1

这是一个有趣的问题......

这不是一个“会玩这个游戏同样在多个平台上”,它“将用户输入的模拟录音时产生完全相同的输出”的问题。我的直觉会说:“不用担心闪光灯虚拟机会将这些差异抽象出来”,但是随着我想更多,有些领域可能会成为问题。

首先,我不会记录任何基于时间的。用户在1.21秒时击中一个键可能很难预测是在帧的计算值之前还是之后发生,特别是如果记录或重放计算机处于负载之下。尝试用用户输入来补间时间可能是失败的秘诀。

浮点精度应该没问题。定义何时轮换的算法在IEEE-754中有详细记录,所有虚拟机使用64位数字,而不管它们运行的​​操作系统如何。我猜数学运算同样可以理解。

我认为这是很好的避免hitTest和whatnot。我想他们在理论上可能会受到硬件加速是否被使用的影响。但我不是那里的专家,所以也许不是。

现在localToGlobal/globalToLocal ...我只是不知道。他们可能有理论上的硬件加速问题,但我倾向于怀疑它。

所以我想我没有给出任何真正的答案。

1

触发功能将无法工作!您必须创建以下自定义实现:acos,asin,atan,atan2,cos,exp,log,pow,sin和sqrt。显然,随机()。

我还在测试Number类的过程。我无法确定additon/subtraction /等。将在每台机器上保持一致。