Table 中任何对象的侦听事件

Listen Event for Any Object in a Table

又一个新手提问。现在是我与 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
        -- From the left
        newBalloon.x = 100
        newBalloon.y = display.contentHeight+150

    elseif ( whereFrom == 2 ) then
        -- From the top
        newBalloon.x = 160
        newBalloon.y = display.contentHeight+150
    elseif ( whereFrom == 3 ) then
        -- From the right
        newBalloon.x = 220
        newBalloon.y = display.contentHeight+150

end
end

local function gameLoop()
    -- Create new balloon
    createBalloon()
     -- Remove balloons which have drifted off screen
    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

您正在将 newBalloon object 添加到 table,但您应该将事件侦听器添加到实例化的每个 newBalloon DisplayObject。这并不完全符合您在标题中的要求(简单地将 object 插入 table 将有效地向该 object 添加一个事件侦听器),但实现了事件响应 I认为您正在寻找。

如果您正在轻敲气球,您会将听众放在气球上。如果您使用 "tap" 事件,target 属性 会告诉您触摸了哪个 object,因此您的 pushBalloon() 函数适用于任何气球。

local pushBalloon( event )
   local balloon = event.target

   if event.phase == "began"

       -- do something to the balloon object (apply impulse, etc.)

   end

end


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

    if newBalloon then

        -- set properties of DisplayObject and add event listener

        newBallon:addEventListener( "tap", pushBalloon )

    end
    ...
end

我已将对 addEventListener() 的调用包裹在支票中以确保 newBalloon ~= nil