2017-05-17 112 views
0

我正在开发一种将子弹投向水龙头方向的游戏。但是,当我在播放器的中心抽头过多/多次,我得到以下错误:声明屏幕失败时失败

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) 

这是结果: enter image description here

距离和fary都是南。

+1

这是很难说如何解决你的问题。也许从tap监听器提供代码。 – ldurniat

+0

嗯,堆栈上的消息说某些断言在函数'?'中失败,该函数从'_initTween'调用,该函数从'to'调用。至少在'to'和'_initTween'上最好查看文档或源代码。 – Dimitry

回答

1

如何调试这样的问题:

由于对解决这个问题的第一步,我建议你打印电话之前参与调用transition.to()变量的值:

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

有可能没有正确设置/初始化。它还会显示是否以及何时试图调用nil对象的转换。

UPDATE:

所以进一步的调查表明,在某些时候,你试图传递NaN(从手册:“(不是数字是用来表示不确定的或不可表示的数值结果的特殊值,如0/0。)“)作为参数transition.to,它反对这个。当你计算distancefarY时,你应该看看你的假设。你可以被零除或取一个负数的平方根?

+1

我测试了不同的变量组合,例如我使用nil作为转换对象。没有错误出现。我使用最新的Corona Simulator稳定版(2017.3068)。 – ldurniat

+0

我用打印线更新了我的问题。请看结果。 –

+0

@JaysonTamayo“无效的数字参数”错误是非常有用的。查看我的答案更新。 – GoojajiGreg

0

我怀疑,当你点击的速度非常快,你在某个时候意外撞到了你正在计算距离的位置。你的距离算法中的某些东西导致其数学失败,并且吐出了NaN(这基本上被零除或占位符除其他数学问题)。

检查距离计算中的NaN并将其替换为0.更好的是,改进计算。你可以使用我写了一个库 - 查找lengthOf功能:

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