监听表中任意对象的事件

又是新手问题。现在是用 Corona 进行了三天了。

下面的代码可以正常工作:气球被生成并飘在空中。现在,我想使用 :addEventListener( "tap", pushBalloon ),使得当气球被点击时,pushBalloon 函数会被执行。请问我需要使用什么变量,并如何定义呢?我想我还需要修改 pushBalloon 函数以使用新变量。

谢谢。

local function createBalloon()
local randomBalloon = math.random( 10 )

    local newBalloon = display.newImageRect( objectSheet, randomBalloon, 112, 142 )
    table.insert( balloonsTable, newBalloon )
    physics.addBody( newBalloon, "dynamic", { radius=70, bounce=0 } )
    newBalloon.myName = "bigBalloon"
newBalloon.alpha = 0.75
newBalloon.gravityScale = randomBalloon/-150

local whereFrom = math.random( 3 )

    if ( whereFrom == 1 ) then
        -- 从左边来
        newBalloon.x = 100
        newBalloon.y = display.contentHeight+150

    elseif ( whereFrom == 2 ) then
        -- 从上面来
        newBalloon.x = 160
        newBalloon.y = display.contentHeight+150
    elseif ( whereFrom == 3 ) then
        -- 从右边来
        newBalloon.x = 220
        newBalloon.y = display.contentHeight+150

end
end

local function gameLoop()
    -- 创建新的气球
    createBalloon()
     -- 移除飘出屏幕的气球
    for i = #balloonsTable, 1, -1 do
     local thisBalloon = balloonsTable[i]

        if ( thisBalloon.x < -100 or
             thisBalloon.x > display.contentWidth + 100 or
             thisBalloon.y < -100  )
        then
            display.remove( thisBalloon )
            table.remove( balloonsTable, i )
        end

    end

end

local function pushBalloon()
    --  balloon:applyLinearImpulse( 0.2, -2, balloon.x, balloon.y )
    -- tapCount = tapCount + 1
    -- tapText.text = tapCount
     newBalloon.gravityScale = 10

end
点赞
用户3455883
用户3455883

你正在将 newBalloon 对象添加到一个表格中,但是你应该在每个 newBalloon DisplayObject 实例化时添加事件侦听器。这并不完全实现你在标题中要求的功能(简单地将对象插入到一个表格中将有效地为该对象添加一个事件侦听器),但是它可以实现你需要的事件响应。

如果你点击气球,你应该将侦听器放在气球上。如果你使用“tap”事件,target属性会告诉你哪个对象被触摸,所以你的 pushBalloon() 函数适用于任何一种气球。

local pushBalloon( event )
   local balloon = event.target

   if event.phase == "began"

       -- 对气球对象进行某些操作(施加脉冲,等等)

   end

end

local function createBalloon()
    ...
    local newBalloon = display.newImageRect( ... )

    if newBalloon then

        -- 设置 DisplayObject 属性并添加事件侦听器

        newBallon:addEventListener( "tap", pushBalloon )

    end
    ...
end

我已经包装了对 addEventListener() 的调用,以确保 newBalloon ~= nil

2017-03-20 00:16:44