2013-11-27 12 views
1

화면에서 드래그 할 수있는 볼을 향해 움직이는 객체를 임의로 생성하려고합니다. 기본적으로 나는이 객체를 피하려고 시도하기를 원한다. 화살을 스폰하고 공 위치를 향해 이동 한 다음 시간이 지나면 사라질려고합니다. 이 코드는 첫 번째 화살표에서는 잘 작동하지만 두 번째 화살표는 삭제하려고 시도 할 때 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 
+0

'remove self' 메서드를 호출하려고합니까? 'removeSelf'를 의미하지 않는다고 확신합니까? 차이가 있습니다. –

+0

'cleararray' 함수는 항상 여러분이 생성 한 마지막 객체의 id 인 전역 objectTag를 사용합니다. 그건 제대로 작동하지 않을거야. 당신은'cleararray'가 당신이 시간 초과하고있는 객체의 objectTag에 대해 작동 할 필요가 있습니다. –

답변

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