为什么每个人都要这样做,如果事件的阶段为“开始”?

我经常看到人们在碰撞函数中这样写(示例):

    local onCollision = function(event)
        if event.phase == "began" then
            event.object2:removeSelf();
            event.object2 = nil;
        end
end
Runtime:addEventListener("collision",onCollision);

为什么不直接写成这样:

local onCollision = function(event)
            event.object2:removeSelf();
            event.object2 = nil;
end
Runtime:addEventListener("collision",onCollision);

我不明白这样写的意义是什么?

点赞
用户2653067
用户2653067

考虑以下的例子,

local object = display.newImage( "ball.png" )

function object:touch( event )
 if event.phase == "began" then

    display.getCurrentStage():setFocus( self )
    self.isFocus = true

elseif event.phase == "moved" then

        print( "moved phase" )

elseif event.phase == "ended" or event.phase == "cancelled" then

        display.getCurrentStage():setFocus( nil )
        self.isFocus = false
    end
end

 return true
end
object:addEventListener( "touch", object )

如果你没有添加事件阶段,你的点击事件将在三个阶段中被检测到,因此它会在函数内执行所有语句三次。

为了避免这种情况,我们使用阶段。

在你的情况下,

 local onCollision = function(event)
        event.object2:removeSelf();
        event.object2 = nil;
 end
 Runtime:addEventListener("collision",onCollision);

这个代码中的内容将被调用三次,这会导致错误。因为在开始阶段你的对象将被移除,当移动阶段到来时,将会因为对象已经被移除而导致错误。

请参考此链接,http://docs.coronalabs.com/api/event/touch/phase.html

2015-04-08 06:28:02