如何在触摸时删除克隆体

我正在编写一个程序,该程序将创建一堆克隆体,当克隆体被点击时,它将删除该克隆体。我只想删除被点击的克隆体。我在触摸事件侦听器方面遇到了问题。它说我正在尝试索引空变量,但是我之前已经定义了它。

我尝试将变量更改为全局变量。

显示.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-数学随机(30,400))
    obj.isDone = false
    - 注意:第二个参数是不带括号的函数名称
    obj:addEventListener("touch",touched()) - 我增加了括号
    return obj
end

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

local function movement(事件)
-使用计时器生成对象
如果 os.time()- startTime > = 1 then
onSpawn()
startTime = os.time()
end

-移动对象
如果 spawnCnt > 0 then
for i = 1,spawnCnt do
if spawnTable [i] .isDone == false then
如果 spawnTable [i] .y > = 600或 spawnTable [i] .fish_tapped == true then
spawnTable [i] .y = 700
spawnTable [i] .isDone = true
显示删除(self)
self = nil
其他
spawnTable [i] .y = spawnTable [i] .y + 4
结束
结束
结束
end
end
end

Runtime:addEventListener("enterFrame",movement)

-当我尝试使触摸事件侦听器中的touched()时,它说我正在调用空值,因此我将函数定义为全局的。
function touched(事件)
    local obj = event.target
    obj.fish_tapped = true
end
点赞
用户7026995
用户7026995

尝试(未测试)

local function movement (event)
  ...
  -- 替换
  -- 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
    -- 注意:第二个参数是不带括号的函数名
    obj:addEventListener("touch", touched)
    return obj
end

了解更多:

2019-07-09 12:45:32