我正在开发一种将子弹投向龙头方向的游戏。但是当我在播放器的中心点击太多/多次时,我收到以下错误:
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)
距离和变化都是南。
答案 0 :(得分:1)
如何调试这样的问题:
作为解决此问题的第一步,我建议您在通话前打印调用transition.to()
中涉及的变量的值:
print("Values for transition: ", bullet, distance, bulletSpeed, farY, farX)
可能没有正确设置/初始化某些内容。它还会显示您是否以及何时尝试在nil
对象上调用转换。
更新:
因此,进一步的调查表明,在某些时候,您正试图通过NaN
(来自手册:“(非数字是一个特殊值,用于表示未定义或不可表示的数值结果,例如0/0)。 )“)作为transition.to
的参数,它反对这一点。您应该在计算distance
和farY
时查看您的假设。你可以将零除以或在某处取负数的平方根吗?
答案 1 :(得分:0)
我怀疑当你拍得很快时,你会在某个时刻不小心碰到你计算距离的位置。距离算法中的某些东西导致其数学失败,并且它会吐出NaN
(这基本上是零除或占位符,用于其他数学问题)。
检查距离计算中的NaN并将其替换为0.更好的是,改进计算。您可以使用我编写的库 - 查找lengthOf
函数: