Yes… here is the entire code…
I have the sprite explosion – “bomb”
is just a sprite with a explosion spritesheet
in one function the transition works fine
in the other it doesn’t.
It supposed to go alpha = 0, to make the sprite invisible after playing.
see the complete code. Thanks
-- // HOW TO MAKE AN APP 2016 -- // By Victor M. Barba -- // Copyright © 2016 by Victor M. Barba -- // All Rights Reserved -------------------------------------------------- local composer = require( "composer" ) local scene = composer.newScene() local sequenceTroth local trothImage local here local obj1 local obj2 local bomb local speed = 2500 local speed3 = 2300 local wait = 1500 local counter = 0 local timerBullet -- ------------------------------------------------------------------------------ -- "scene:create()" function scene:create(event) local sceneGroup = self.view local R = math.random(1, 99) local G = math.random(1, 99) local B = math.random(1, 99) local bgRectangle = display.newRect(sceneGroup, 0, 0, display.contentWidth, display.contentHeight) bgRectangle.x = display.contentCenterX bgRectangle.y = display.contentCenterY bgRectangle:setFillColor((R/100), (G/100), (B/100)) local buttonBack = display.newImageRect(sceneGroup, "images/backButton.png", 150, 150) buttonBack.x = 100 buttonBack.y = 60 local function buttonBackListener() Runtime:removeEventListener("enterFrame", explosion ) --Runtime:removeEventListener("touch", screenTouched) timer.cancel( timerBullet ) composer.gotoScene("menu3") end buttonBack:addEventListener("tap", buttonBackListener) local codeButton = display.newImageRect(sceneGroup, "images/seeButton.png", 150, 150) codeButton.x = display.contentWidth - 100 codeButton.y = 100 local function codeButtonListener() Runtime:removeEventListener("enterFrame", explosion ) Runtime:removeEventListener("touch", screenTouched) timer.cancel( timerBullet ) composer.gotoScene("programApp16") end codeButton:addEventListener("tap", codeButtonListener) sequenceTroth = { { name="smile", start=1, count=12, time=6000 }, { name="surprise", start=5, count=2, time=1000 }, { name="sad", start=2, count=6, time=1600 }, { name="happy", start=1, count=4, time=2000 } } trothImage = graphics.newImageSheet( "images/spriteTroth.png", { width=200, height=200, numFrames=12 } ) function createTroth() obj1 = display.newSprite( trothImage, sequenceTroth ) sceneGroup:insert(obj1) obj1.x = display.contentCenterX obj1.y = display.contentHeight - 60 obj1:scale(.6, .6) obj1.setSequence = "smile" obj1:play() end createTroth() sequenceExplosion = { { name="boom", start=1, count=48, time=1000, loopCount=1 } } explosionImage = graphics.newImageSheet( "images/explosionSpritesheet.png", { width=400, height=400, numFrames=48 } ) function createExplosion() bomb = display.newSprite( explosionImage, sequenceExplosion ) sceneGroup:insert(bomb) bomb.x = obj1.x bomb.y = obj1.y bomb:scale(.6, .6) bomb.setSequence = "boom" bomb:play() end end -- ------------------------------------------------------------------------------ -- "scene:show()" function scene:show( event ) local sceneGroup = self.view local phase = event.phase if (phase == "will") then---------------------------------------------------- elseif (phase == "did") then---------------------------------------------------- local floor = display.newRect(sceneGroup, 0, 0, display.contentWidth, 20) floor.x = display.contentCenterX floor.y = display.contentHeight floor:setFillColor(.97, .92, .10) local leftWall = display.newRect(sceneGroup, 0, 0, 20, display.contentHeight) leftWall.x = 0 leftWall.y = display.contentCenterY leftWall:setFillColor(.97, .92, .10) local rightWall = display.newRect(sceneGroup, 0, 0, 20, display.contentHeight) rightWall.x = display.contentWidth rightWall.y = display.contentCenterY rightWall:setFillColor(.97, .92, .10) obj2 = display.newImageRect(sceneGroup, "images/bullet.png", 200, 300) obj2:scale(.4, .4) obj3 = display.newImageRect(sceneGroup, "images/bullet.png", 200, 300) obj3:scale(.4, .4) local function resetBullets() obj2.x = math.random(10, 1400) obj2.y = -100 obj3.x = math.random(10, 1400) obj3.y = -100 counter = counter + 1 if counter == 20 then Runtime:removeEventListener("enterFrame", explosion ) Runtime:removeEventListener("touch", screenTouched) timer.cancel( timerBullet ) local topText = display.newText( sceneGroup, "You did it, Next Level!", 100, 200, native.systemFont, 60 ) topText.x = display.contentCenterX topText.y = display.contentCenterY topText:setFillColor( 0, 0, 0 ) end end resetBullets() local function sendBullet() transition.to(obj2, {time = speed, delay = wait, y = 1000, onComplete = resetBullets}) transition.to(obj3, {time = speed3, delay = wait, y = 1000, onComplete = resetBullets}) end timerBullet = timer.performWithDelay(3000, sendBullet, 10) -- Circle-based collision detection local function hasCollidedCircle( obj1, obj2 ) if ( obj1 == nil ) then -- Make sure the first object exists return false end if ( obj2 == nil ) then -- Make sure the other object exists return false end if ( obj3 == nil ) then -- Make sure the other object exists return false end local dx = obj1.x - obj2.x local dy = obj1.y - obj2.y local dx3 = obj1.x - obj3.x local dy3 = obj1.y - obj3.y local distance = math.sqrt( dx\*dx + dy\*dy ) local distance3 = math.sqrt( dx3\*dx3 + dy3\*dy3 ) local objectSize = (obj2.contentWidth/2) + (obj1.contentWidth/2) local objectSize3 = (obj3.contentWidth/2) + (obj1.contentWidth/2) if ( distance \< objectSize ) then return true end if ( distance3 \< objectSize3 ) then return true end return false end hasCollidedCircle( obj1, obj2, obj3 ) local function explosion() if hasCollidedCircle( obj1, obj2 ) then -- do the stuff when they are touching obj1.isVisible = false transition.cancel() obj1:pause() createExplosion() transition.to(bomb, {time = 1000, delay = 100, alpha = 0}) --// THIS IS NOT WORKING! Runtime:removeEventListener("enterFrame", explosion ) Runtime:removeEventListener("touch", screenTouched) timer.cancel( timerBullet ) else obj1.alpha = 1 end if hasCollidedCircle( obj1, obj3 ) then -- do the stuff when they are touching obj1.isVisible = false transition.cancel() obj1:pause() createExplosion() transition.to(bomb, {time = 1000, delay = 100, alpha = 0})--// THIS WORKS FINE!!! Runtime:removeEventListener("enterFrame", explosion ) Runtime:removeEventListener("touch", screenTouched) timer.cancel( timerBullet ) else obj1.alpha = 1 end end Runtime:addEventListener("enterFrame", explosion ) function screenTouched( event ) if ( event.phase == "began" ) then here = event.x transition.to(obj1, {time = 1000, x = here}) elseif ( self.isFocus ) then if ( event.phase == "moved" ) then elseif ( event.phase == "ended" or event.phase == "cancelled" ) then end end return true end local invisibleRectangle = display.newRect(sceneGroup, 0, 0, display.contentWidth, 400) invisibleRectangle.x = display.contentCenterX invisibleRectangle.y = display.contentCenterY invisibleRectangle:setFillColor(.97, .92, .10) invisibleRectangle:addEventListener("touch", screenTouched) end end -- ------------------------------------------------------------------------------ -- "scene:hide()" function scene:hide( event ) local sceneGroup = self.view local phase = event.phase if ( phase == "will" ) then elseif ( phase == "did" ) then end end -- ------------------------------------------------------------------------------ -- Listener setup scene:addEventListener( "create", scene ) scene:addEventListener( "show", scene ) scene:addEventListener( "hide", scene ) -- ------------------------------------------------------------------------------ return scene