Как удалить клона при прикосновении - PullRequest
0 голосов
/ 07 июля 2019

Я работаю над программой, которая создаст кучу клонов и удалит клон, когда клон будет записан на пленку. Я только хочу, чтобы удалить клон, который записан на пленку. У меня проблема с приемником событий касания. Это говорит о том, что я пытаюсь индексировать переменную nil, но я определил это ранее в программе.

Я попытался изменить переменную на глобальную переменную.

display.setDefault("background", 0, 0, 200)
math.randomseed(os.time())

local boat = display.newImage( "boatt.png" )
boat.x = 163
boat.y = 225

local score = 0
local spawnCnt = 0
local spawnTable = {}
local startTime = os.time()
local startTime2 = os.time()
local fish_tapped


local function spawn ()
    local obj = display.newImageRect("fishpic.png",70,70)
    obj.x = math.random(1, 300)
    obj.y = (0 - math.random(30, 400))
    obj.isDone = false
    -- Note: Second argument is function name without brakets
    obj:addEventListener("touch", touched()) --i added brackets to this
    return obj
end

local function onSpawn ()
spawnCnt = spawnCnt + 1
spawnTable[spawnCnt] = spawn()
end

local function movement (event)
-- SPAWN OBJECT USING TIMER
if os.time() - startTime >= 1 then 
onSpawn()
startTime = os.time()
end



-- MOVE OBJECT
if spawnCnt > 0 then
for i = 1, spawnCnt do 
if spawnTable[i].isDone == false then 
if spawnTable[i].y > 600 or spawnTable[i].fish_tapped == true then
spawnTable[i].y = 700
spawnTable[i].isDone = true
display.remove(self)
self = nil
else 
spawnTable[i].y = spawnTable[i].y + 4
end
end
end
end 
end

Runtime:addEventListener ("enterFrame",movement)



--when i tried to have touched() in the event listener for touch it said that i was calling a 
--nill value, so I made the funciton global. 
function touched( event )
    local obj = event.target
    obj.fish_tapped = true
end

1 Ответ

0 голосов
/ 09 июля 2019

Попробуйте (не проверено)

local function movement (event)
  ...
  -- Replace 
  -- if spawnTable[i].y > 600 or fish_tapped == true then
  -- with
  if spawnTable[i].y > 600 or spawnTable[i].fish_tapped == true then
  ...
end

local function touched( event )
    local obj = event.target
    obj.fish_tapped = true
end

local function spawn ()
    local obj = display.newImageRect("fishpic.png",70,70)
    obj.x = math.random(1, 300)
    obj.y = (0 - math.random(30, 400))
    obj.isDone = false
    -- Note: Second argument is function name without brakets
    obj:addEventListener("touch", touched) 
    return obj
end

Подробнее:

...