2015-04-08 9 views
0

я вижу, что люди ВСЕГДА писать в функции сговора (пример):Почему eveyone делать, если event.phase == "начал" тогда ...?

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); 

Я не понимаю, в чем смысл?

+0

Я почти совсем не знаком с короной, но я предполагаю, что функция столкновений вызывается на несколько частей при столкновении, и эти части отмечены 'event.phase' так используя ваш последний snippet, функция будет пытаться работать на 'object2' в течение нескольких фаз, и это вызовет проблему во время любых вторичных фаз, поскольку она уже будет уничтожена. –

ответ

0

рассмотреть этот пример,

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

+0

, но я использую его сейчас, и это не создает проблем. –

+0

, пожалуйста, кто-то может оповещать –