2013-11-27 48 views
1

我试图随机产生朝向可以在屏幕上拖动的球移动的对象。基本上我只想让用户尝试避免这些对象。我正在尝试使箭产生并移向球的位置,然后在一段时间后消失。这里的代码适用于第一个箭头,但是当它试图删除第二个时,它会调用并且错误地说attempt to call method 'remove self' (a nil value)在corona lua中删除数组中的特定对象

local function cleararray() 
    if (object[objectTag]) then 
     object[objectTag]:removeSelf() 
    end 
end 

local function spawnObject() 
    objectTag = objectTag + 1 
    local objIdx = mRandom(#objects) 
    local objName = objects[objIdx] 
    object[objectTag] = display.newImage("btn_arrow.png") 
    object[objectTag].x = mRandom(320) 
    object[objectTag].y = mRandom(480) 
    object[objectTag].name = objectTag 
    print(objectTag) 
    transition.to(object[objectTag], { time=2000, y=myObject.y, x=myObject.x }) 
    timer.performWithDelay(2000,cleararray,1) 
end 
+0

尝试调用方法'remove self'?你确定你不是指'removeSelf'?它们是有区别的。 –

+0

您的'cleararray'函数正在使用全局objectTag,它始终是您创建的最后一个对象的ID。这不会正常工作。你需要在正在超时的对象的objectTag上运行'cleararray'。 –

回答

0

cleararray通过某种方式知道要删除哪个对象。引用objectTag将不起作用,因为这是全球性的,所以它总是拥有迄今为止达到的最高价值,而不是您尝试删除的对象的价值。相反,您可以创建一个引用该对象的闭包,以便知道要在哪个对象上进行操作。

local function spawnObject() 
    objectTag = objectTag + 1 
    object[objectTag].name = objectTag 
    ... 
    local function cleararray() 
     object[object.name]:removeSelf() 
     object[object.name] = nil 
    end 
    timer.performWithDelay(2000,cleararray,1) 
end