2014-05-05 5 views
0

Я создал сцену, в которой происходит взрыв гранаты и земли, есть всего 5 гранат, доступных игроку. Проблема заключается в том, что бросает более одной гранаты, снимает функцию, только граната, а предыдущая не выдувается и немедленно удаляется.снятие изображения через некоторое время

if event.object1.myname=="ground" and event.object2.myname=="grenade2" then 
local ex2=audio.play(bomb,{loops=0}) 
health1=health1-1 
check() 
health1_animation:setFrame(health1) 
explosion_animation2=display.newSprite(explosion_sheet,explosion_sequence) 
explosion_animation2.x=event.object2.x 
explosion_animation2.y=event.object2.y 
explosion_animation2:play() 
end 
timer.performWithDelay(300,function() explosion_animation2:removeSelf() 
end,1) 

ответ

1

Вы объявляете explosion_animation2 как глобальная переменная, и поэтому перезаписывается каждый раз, когда это столкновение код называется. Вы хотите иметь explosion_animation2 как локальную переменную так, чтобы использовать его в замедленной функции создаст замыкание вокруг него:

local explosion_animation2 
if event.object1.myname=="ground" and event.object2.myname=="grenade2" then 
    local ex2=audio.play(bomb,{loops=0}) 
    health1=health1-1 
    check() 
    health1_animation:setFrame(health1) 
    explosion_animation2=display.newSprite(explosion_sheet,explosion_sequence) 
    explosion_animation2.x=event.object2.x 
    explosion_animation2.y=event.object2.y 
    explosion_animation2:play() 
end 
timer.performWithDelay(300,function() explosion_animation2:removeSelf() 
end,1) 

Если по какой-то причине вы полагаетесь на explosion_animation2 быть глобальным, вы можете сделать локальную копию вместо:

if event.object1.myname=="ground" and event.object2.myname=="grenade2" then 
    local ex2=audio.play(bomb,{loops=0}) 
    health1=health1-1 
    check() 
    health1_animation:setFrame(health1) 
    explosion_animation2=display.newSprite(explosion_sheet,explosion_sequence) 
    explosion_animation2.x=event.object2.x 
    explosion_animation2.y=event.object2.y 
    explosion_animation2:play() 
end 
local closure_var=explosion_animation2 
timer.performWithDelay(300,function() closure_var:removeSelf() 
end,1) 
Смежные вопросы