如何在Corona SDK的enter frame事件中在执行代码之前检查对象的nil值。

我想从一个组中移除一个年龄增加到20秒的对象,这些对象是在游戏开始20秒后创建的,因此在游戏循环中显示nil值错误,我想知道如何检查nil对象,因为这里的游戏循环在对象创建之前执行,请尝试解决问题。谢谢...

下面是代码:

function createobject(event)
    local object=display.newImage("obj1.png")
    object.x=500
    object.y=600
    object.GeneratedTime=event.time/1000
    group:insert( object )
end

function showobj(event)
    createobject(event)
end
timer.performWithDelay(8000, showobj, 0)

function gameloop(event)
    if group~=nil then
        for i=1,group.numChildren do
            local child = group[i]
            local age= event.time/100-child[i].GeneratedTime
            if age>20 then
            child.parent:remove( child[i] )
            end
        end
    end
end

Runtime:addEventListener( "enterFrame", gameloop )
点赞
用户2679394
用户2679394

我还没有使用过corona,但是如果你只是想检查对象是否存在,我可以看到你在show obj函数的arg 1上有一个事件,并且你说在定时器结束后它只会给出空值。所以检查对象是否为空的最佳方法如下:

function showobj(event)
   if event == nil then return end
   createobject(event)
end
2013-09-08 20:07:16
用户1979583
用户1979583

尝试这个:

if(child[i]~=nil)then    -- 你可以这样检查 child 的存在性 --
  local age= event.time/100-child[i].GeneratedTime
  if age>20 then
    child.parent:remove( child[i] )
  end
end

继续编程... :)

2013-09-09 05:09:24