尝试调用方法'removeSelf'(一个空值)的错误。
2014-3-26 18:34:37
收藏:0
阅读:80
评论:3
由于某些原因,我无法删除一个组对象,即使我检查它是否为 nil。
我尝试的第一件事:
if playGroup~=nil then
playGroup:removeSelf()
end
错误:尝试删除已从场景中删除或其父/祖先组已被删除的对象。
我也尝试了这个:
for k,v in pairs(playGroup) do
if k ~= nil then
k:removeSelf()
end
end
错误:尝试调用 'removeSelf' 方法(一个空值)
点赞
用户869951
你不需要从一个组中删除对象,当你移除组时,Corona会自动帮你移除。所以,即使经过hades2510建议的修复之后,这个循环也是没有必要的。
你得到的错误信息,“尝试删除已经被删除的对象...”,提示 playGroup 是一个普通的表,而不是一个显示对象。对显示对象调用 removeSelf 会删除与Corona相关的条目,将对象留下作为普通的表。所以,至少有以下可能性:
- 你的代码可能已经在另一个事件处理程序中删除了
playGroup, - 处理程序被第二次调用,
playGroup被创建为普通表而不是显示对象。
你可以在 removeSelf 之后将 playGroup = nil 设置为 nil 这样,如果Corona再次碰到 if 代码块,它就不会再尝试删除它:
if playGroup ~= nil then
playGroup:removeSelf()
--现在 playGroup 是普通表
--不要再运行这个代码块:
playGroup = nil
end
如果这确实修复了问题,那么最好还是确定一下在 playGroup 被从显示中移除后为什么 if 代码块还会被调用。一个print语句,不设置playGroup为nil,就可以解决问题:
if playGroup ~= nil then
print('警告:将要从显示中移除游戏组')
playGroup:removeSelf()
print('警告:游戏组已从显示中移除')
end
一旦你知道原因,就可以再加回 playGroup = nil。
2014-03-26 19:24:09
用户2409015
请确保您已经将对象插入到您的表格或分组中。如果您没有将对象插入到表格或分组中,然后尝试删除它,那么会产生这个错误。
2014-03-27 09:36:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你应该销毁 v,而不是 k:
for k,v in pairs(playGroup) do if v ~= nil then v:removeSelf() end end