2017-05-17 138 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