“错误参数 #-1 到 'newImageRect'(预期代理,没有)”- Lua,使用 Corona SDK
" bad argument #-1 to 'newImageRect' (Proxy expected, got nil) " - Lua, using Corona SDK
所以我才开始学习如何使用Corona SDK 来创建游戏。做一个小行星射击类型的游戏,玩游戏的时候遇到这个错误
(我知道这个问题几乎完全相同,但它有 0 个答案,唯一的评论不适用于我。)
这是完整的错误 + 堆栈跟踪:
19:21:16.393 ERROR: Runtime error
19:21:16.393 C:\Users\Some User\Documents\Corona Projects\StarExplorer\game.lua:87: bad argument #-1 to 'newImageRect' (Proxy expected, got nil)
19:21:16.393 stack traceback:
19:21:16.393 [C]: in function 'newImageRect'
19:21:16.393 C:\Users\Some User\Documents\Corona Projects\StarExplorer\game.lua:87: in function '_listener'
19:21:16.393 ?: in function <?:167>
19:21:16.393 ?: in function <?:169>
Here is a hastebin of the game.lua, and here 是 menu.lua class 的 hastebin,可将场景从菜单切换到游戏。
我可以说第 87 行是导致问题的原因,newImageRect 的参数有问题,但除此之外我没有任何线索。
游戏 运行 在第一个 运行 上完美运行,但尝试重玩它会导致错误。
菜单文件中切换场景的代码在第13-17行。
感谢任何帮助,如果我很愚蠢并且遗漏了一些明显的东西,我们深表歉意。
谢谢!
编辑:错误是在尝试删除 game.lua 场景时引起的。
您正在用 timer.performDelay
呼叫 createAsteroid
。所以,当游戏场景被破坏或隐藏时,你需要取消这个定时器。
asteroidSpawnTimer = timer.performWithDelay( asteroidSpawnTime, createAsteroid, 0 )
试试这个:
function scene:hide( event )
--[[...]]--
if ( phase == "will" ) then
timer.cancel( gameLoopTimer )
timer.cancel( asteroidSpawnTimer ) -- cancel it
--[[...]]--
所以我才开始学习如何使用Corona SDK 来创建游戏。做一个小行星射击类型的游戏,玩游戏的时候遇到这个错误
(我知道这个问题几乎完全相同,但它有 0 个答案,唯一的评论不适用于我。)
这是完整的错误 + 堆栈跟踪:
19:21:16.393 ERROR: Runtime error
19:21:16.393 C:\Users\Some User\Documents\Corona Projects\StarExplorer\game.lua:87: bad argument #-1 to 'newImageRect' (Proxy expected, got nil)
19:21:16.393 stack traceback:
19:21:16.393 [C]: in function 'newImageRect'
19:21:16.393 C:\Users\Some User\Documents\Corona Projects\StarExplorer\game.lua:87: in function '_listener'
19:21:16.393 ?: in function <?:167>
19:21:16.393 ?: in function <?:169>
Here is a hastebin of the game.lua, and here 是 menu.lua class 的 hastebin,可将场景从菜单切换到游戏。
我可以说第 87 行是导致问题的原因,newImageRect 的参数有问题,但除此之外我没有任何线索。
游戏 运行 在第一个 运行 上完美运行,但尝试重玩它会导致错误。 菜单文件中切换场景的代码在第13-17行。
感谢任何帮助,如果我很愚蠢并且遗漏了一些明显的东西,我们深表歉意。
谢谢!
编辑:错误是在尝试删除 game.lua 场景时引起的。
您正在用 timer.performDelay
呼叫 createAsteroid
。所以,当游戏场景被破坏或隐藏时,你需要取消这个定时器。
asteroidSpawnTimer = timer.performWithDelay( asteroidSpawnTime, createAsteroid, 0 )
试试这个:
function scene:hide( event )
--[[...]]--
if ( phase == "will" ) then
timer.cancel( gameLoopTimer )
timer.cancel( asteroidSpawnTimer ) -- cancel it
--[[...]]--