尝试索引字段“?”(一个空值)- 错误。
2014-10-20 13:1:24
收藏:0
阅读:142
评论:3
我无法确定我的代码出了什么问题,但我想实现的是定期刷出方块来滚动屏幕,玩家必须躲避。每个方块滑过屏幕左侧时,都会将“障碍物值+1”
我的问题是,当我的'block'对象滑过屏幕时,我会得到这个错误:
“试图索引字段“?”(一个空值)”
能否有人帮助我,因为我真的不知道如何解决这个问题。 谢谢
local yPos = {50,110,200}
local speed = 6
local block = {}
local obstacles = 0
function createBlock(event)
local rnd = math.floor(math.random() * 4) + 1
b = display.newImage('images/block3.png', display.contentWidth, yPos[math.floor(math.random() * 3)+1])
b.x = 480
b.name = 'block'
physics.addBody(b, "static")
blocks:insert(b)
print(b.x)
return true
end
function gameLoop( event )
if(blocks ~= nil)then
for i = 1, blocks.numChildren do
blocks[i].x = blocks[i].x - speed -- ((这是产生错误的一行))
if(blocks[i].x < -0) then
display.remove(blocks[i])
blocks[i] = nil
print("+1!!")
obstacles = obstacles +1
end
end
end
end
timerSrc = timer.performWithDelay(900, createBlock, 0)
Runtime:addEventListener("enterFrame", gameLoop)
点赞
用户869951
在这里,你调用了display.remove(blocks[i]),这是可以的,但是在接下来的一行中,你设置了blocks[i]=nil。从corona文档中没有迹象表明这是一个有效的操作。
而且,一旦对象被移除,它就不再在组中,所以肯定做blocks[i]=nil是不正确的:你可能会将下一个块变为空!我无法在这里检查,但是在循环中删除i对象之前和之后,打印对象的id是很有趣的。你可能会发现,在执行display.remove(blocks[4])(选择i = 4以使示例更清晰)之前,blocks[4]与之后不是同一对象,因此实际上你正在删除两个对象(第二个对象被错误地删除)。
如果blocks是常规表而不是用户数据,那么问题将是不同的,但是你仍然会遇到问题(超出你的问题范围;但我建议你尝试一下!)。
2014-02-24 20:24:35
用户2409015
我认为问题出在屏幕外的物体上。当物体移动出可见组时,它就变成了空值。因此,您不能访问该对象。 您需要在移出可见屏幕之前将该对象的 alpha = 0 或 isVisible = false 定义,并且然后您就可以访问该对象了。
2014-02-25 07:29:16
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
如果您尝试运行代码,但尝试访问表“blocks”中为“nil”的索引,则会出现此错误。我猜想这与您正在进行的“numChildren”有关。不确定它来自何处,但我建议使用默认的
#运算符来测量表的大小。例如:
for i = 1, #blocks do ... end甚至可以使用迭代器:
for i, block in ipairs(blocks) do ... end另一个可能性是您的
blocks:insert()方法没有按顺序插入值,以0为起点进行插入,甚至没有使用数字索引(尽管这很少见)。在这种情况下,我建议使用标准的
table.insert(blocks, b)。