Hi guys, this is my game and when I start to touch the screen, the character will jump off, but currently when I do it, it is jumping countlessly. This is my full code.
-- xxx starts to jump when it is touched function xxxJump(event) if event.phase == "began" then xxx.enterFrame = function(self, event) self:applyForce(0, -5, self.x, self.y) end print("Game Scene: xxxs jumps with -5") Runtime:addEventListener("enterFrame", xxx) print("Game Scene: xxx jumps with listener.") elseif event.phase == "ended" then Runtime:removeEventListener("enterFrame", xxx) print("Game Scene: xxx ends with listener.") end end -- "scene:create()" function scene:create( event ) local sceneGroup = self.view -- xxx Sprite Sheet Options, width, height and number of frames xxxImageSheet = graphics.newImageSheet("img/xxx.png", { width = 80, height = 104, numFrames = 6 }) xxx = display.newSprite(xxxImageSheet, { name="xxx", start=1, count=6, time=1000, loopCount=0, loopDirection="bounce" }) xxx.myName = "xxx" xxx.x = -50 xxx.y = display.contentCenterY + 200 xxx:play() -- Play the animation physics.addBody(xxx, "static", { density=.1, bounce=0.3, friction=0.1, radius=15 }) transition.to(xxx, {time = 3000, x = 150, onComplete=xxxComeToScene }) sceneGroup:insert(xxx) -- abc Sprite Sheet Options, width, height and number of frames abcImageSheet = graphics.newImageSheet("img/abc.png", { width = 73, height = 47, numFrames = 2 }) abc = display.newSprite(abcImageSheet, { name="abc", start=1, count=2, time=800, loopCount=0, loopDirection="bounce" }) abc.myName = "abc" abc.x = 900 abc.y = display.contentCenterY abc.speed = math.random(5, 10) abc.initY = abc.y abc.amp = math.random(50, 100) abc.angle = math.random(1, 360) abc:play() -- Play the animation physics.addBody(abc, "static", { density=.1, bounce=0.3, friction=0.1, radius=20 }) transition.to(abc, { time = 2000, x = 850, onComplete=abcComeToScene }) sceneGroup:insert(abc) --[[ -- abc Sprite Sheet Options, width, height and number of frames abcImageSheet = graphics.newImageSheet("img/abc.png", { width = 73, height = 47, numFrames = 2 }) abc2 = display.newSprite(abcImageSheet, { name="abc2", start=1, count=2, time=800, loopCount=0, loopDirection="bounce" }) abc2.myName = "abc2" abc2.x = 900 abc2.y = 800 abc2.speed = math.random(5, 10) abc2.initY = abc.y abc2.amp = math.random(20, 100) abc2.angle = math.random(1, 360) abc2:play() -- Play the animation physics.addBody(abc2, "static", { density=.1, bounce=0.3, friction=0.1, radius=35 }) transition.to(abc2, { time = 2000, x = 800, onComplete=abcComeToScene }) sceneGroup:insert(abc2) ]]-- -- bbb Sprite Sheet Options, width, height and number of frames bbbImageSheet = graphics.newImageSheet("img/bbb.png", { width = 23, height = 20, numFrames = 2 }) bbb = display.newSprite(bbbImageSheet, { name="bbb", start=1, count=2, time=800, loopCount=0, loopDirection="bounce" }) bbb.myName = "bbb" bbb.x = 900 bbb.y = display.contentCenterY + 100 bbb.speed = math.random(5, 10) bbb.initY = bbb.y bbb.amp = math.random(20, 100) bbb.angle = math.random(1, 360) bbb:play() -- Play the animation physics.addBody(bbb, "static", { density=.1, bounce=0.3, friction=0.1, radius=15 }) transition.to(bbb, { time = 2000, x = 800, onComplete=abcComeToScene }) sceneGroup:insert(bbb) end -- "scene:show()" function scene:show( event ) local sceneGroup = self.view if(event.phase == "will") then -- hhh is moving from right to left hhh.enterFrame = transitionFromRightToLeft Runtime:addEventListener("enterFrame", hhh) -- uuu is moving from right to left uuu.enterFrame = moveFromRightToLeft Runtime:addEventListener("enterFrame", uuu) -- abc is moving abc.enterFrame = abcMoves Runtime:addEventListener("enterFrame", abc) bbb.enterFrame = bbbMoves Runtime:addEventListener("enterFrame", bbb) -- It occurs when the screen is touched. Runtime:addEventListener("touch", xxxJump) xxx.collision = xxxCollide xxx:addEventListener("collision", xxx) abc.collision = xxxCollide abc:addEventListener("collision", abc) mushroomRed.collision = xxxCollide mushroomRed:addEventListener("collision", mushroomRed) bbb.collision = xxxCollide bbb:addEventListener("collision", bbb) elseif(event.phase == "did") then end end -- "scene:hide()" function scene:hide( event ) local sceneGroup = self.view if (event.phase == "will") then Runtime:removeEventListener("enterFrame", hhh) Runtime:removeEventListener("enterFrame", uuu) Runtime:removeEventListener("enterFrame", abc) Runtime:removeEventListener("enterFrame", bbb) Runtime:removeEventListener("touch", xxxJump) xxx:removeEventListener("collision", xxx) abc:removeEventListener("collision", abc) mushroomRed:removeEventListener("collision", mushroomRed) bbb:removeEventListener("collision", bbb) elseif (event.phase == "did") then -- Needs to put for did end end -- "scene:destroy()" function scene:destroy(event) local sceneGroup = self.view end -- Listener setup scene:addEventListener("create", scene ) scene:addEventListener("show", scene ) scene:addEventListener("hide", scene ) scene:addEventListener("destroy", scene ) return scene
Edited: working code, credit to roaminggamer
function objectJump(event) if event.phase == "began" then object.enterFrame = function(self, event) -- self:applyForce(0 \* self.mass, -200 \* self.mass, self.x, self.y) -- object:setLinearVelocity(0, -400) -- object is jumping with -300 to object.y object:applyLinearImpulse(0, -200, object.x, object.y) -- This is working and it jumps for -200 y position end print("Game Scene: objects jumps with -200") Runtime:addEventListener("enterFrame", object) print("Game Scene: object jumps with listener.") elseif event.phase == "ended" then Runtime:removeEventListener("enterFrame", object) object:setLinearVelocity(0, 0) print("Game Scene: object ends with listener.") end end