hi Rob,
by reading this post i find partially the solution for me.
i would reproduce an animation at multiple time so i put a timer to prevent the asynchronous events. but it works two time. when i clic more than 2 times all my transitions run at the same time.
i have put a video below and my snippet. it would be cool if you could help me 
https://youtu.be/pqy3QjynvLw
local Backgroundinvisible = display.newImageRect("back01.png", display.actualContentWidth,display.actualContentHeight) Backgroundinvisible.myId = 200 Backgroundinvisible.x, Backgroundinvisible.y= display.actualContentWidth\*.5,display.actualContentHeight\*.5 Backgroundinvisible.alpha = 1 local mathr = math.random -------------------------------------------------------------------------------------------------------------------------------- -- NECESSARY -------------------------------------------------------------------------------------------------------------------------------- local numberofstarAnim = 3 local numberofstar = 30 local refX, refY = 200,200 -- STAR EXPLODE local star = {} for a=1,numberofstar do star[a] = display.newImageRect( "star.png",40,40 ) for i=1, numberofstar do star[a].x=mathr(100,300) star[a].y=mathr(100,300) end star[a].alpha = 0 --.5 star[a].xScale=1 star[a].yScale = 1 star[a].flag = true end --for local arm = {} for a= 1,#star do arm[a] = display.newImageRect( "arm.png",20,20 ) arm[a].x = refX arm[a].y = refY arm[a].anchorY = -1 arm[a].alpha = 0 arm[a].xScale=.3 arm[a].yScale = .8 arm[a].angle = nil arm[a].angleR = nil --radians arm[a].flag = true end--for local function starExplode() -- a= var local countStarExplode = 0--test starExplode for b = 1, #star do if (star[b].flag == true ) then countStarExplode = countStarExplode + 1 if countStarExplode == numberofstarAnim then for a=1, b do print(a) arm[a].flag = false star[a].flag = false local function beginAnimStar() star[a].alpha = 1 --.5 arm[a].alpha = 1 end --beginAnimStar local function calculateTheOrientation() distY = star[a].y - refY distX = star[a].x - refX arm[a].angleR= math.atan2(distY, distX) arm[a].angle=(arm[a].angleR \* 180 / math.pi)-90 --convert radians to degree + perpendicular arm[a].rotation = arm[a].angle end--function calculateTheOrientation() beginAnimStar() local function finishTheTransition() local function returnFlagToStar() if star[a].flag == false and arm[a].flag == false then star[a].flag = true arm[a].flag = true end end star[a].transition=transition.to(star[a],{time=500,alpha =0, transition=easing.inElastic}) arm[a].transition=transition.to(arm[a],{time=500,alpha =0, onComplete=returnFlagToStar}) end--finishtheTransition timer.performWithDelay(1020, finishTheTransition) end--if end--if end--for end--function end -- -- LISTENER ----------------------------------------------------- local function tapOnBackground(event) --touchk if event.phase == "ended" then target = event.target if target.myId == 200 then starExplode() end --if end --if return true end Backgroundinvisible:addEventListener("touch", tapOnBackground)