【问题标题】:Removing specific objects from an array in corona lua从corona lua中的数组中删除特定对象
【发布时间】:2013-12-13 17:03:13
【问题描述】:

我正在尝试随机生成朝向可以在屏幕上拖动的球移动的对象。基本上我只是希望用户尽量避免这些对象。我试图让箭头产生并向球的位置移动,然后在一段时间后消失。此处的代码适用于第一个箭头,但是当它尝试删除它调用的第二个箭头时,错误提示 attempt to call method 'remove self' (a nil value)

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

【问题讨论】:

  • 尝试调用方法remove self?你确定你不是指removeSelf?有区别。
  • 您的cleararray 函数正在使用全局objectTag,它始终是您创建的最后一个对象的ID。那将无法正常工作。您需要让cleararray 对您正在超时的对象的objectTag 进行操作。

标签: arrays lua coronasdk


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2018-10-03
    • 2011-11-09
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多