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
。
又一个新手提问。现在是我与 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
。