点击屏幕过多时断言失败

Assertion Failed when tapping the screen too much

我正在开发一款游戏,可以将子弹投向点击的方向。但是当我在播放器的中心点击 much/multiple 次时,出现以下错误:

Runtime error
    assertion failed!
    stack traceback:
        [C]: in function 'assert'
        ?: in function '?'
        ?: in function '_initTween'
        ?: in function 'to'
        /Users/User/Desktop/MD/screen1.lua:61: in function </Users/User/Desktop/MD/screen1.lua:31>
        ?: in function <?:221>

但是当我慢慢点击时,它并没有抛出错误。这是 screen1.lua 的第 61 行:

bullet.trans = transition.to(bullet, { time=distance/bulletSpeed, y=farY, x=farX, onComplete=nil})

感谢大家的帮助!

编辑: 添加此行后:

print("Values for transition: ", bullet, distance, bulletSpeed, farY, farX)

这是结果:

Distance 和 fary 都是 Nan。

如何调试这样的问题:

作为解决这个问题的第一步,我建议你在调用之前打印出调用transition.to()所涉及的变量的值:

print("Values for transition: ", bullet, distance, bulletSpeed, farY, farX)

可能有些东西 set/initialized 不正确。它还会显示您是否以及何时尝试在 nil 对象上调用转换。

更新:

所以进一步的调查表明,在某些时候你正试图通过 NaN(来自手册:“(不是数字是用于表示未定义或无法表示的数值结果的特殊值,例如 0/ 0.)") 作为 transition.to 的参数,它对此表示反对。当您计算 distancefarY 时,您应该查看您的假设。你能除以零还是在某处取负数的平方根?

我怀疑当你快速敲击时,你在某个时候不小心碰到了你正在计算距离的位置。你的距离算法中的某些东西导致它的数学失败并吐出 NaN (这基本上是除以零或其他数学问题的占位符)。

在距离计算中检查 NaN 并将其替换为 0。更好的是,改进计算。您可以使用我编写的库 - 查找 lengthOf 函数:

https://gist.github.com/HoraceBury/9431861