Hello everyone, I just learned programming with corona SDK. Recently, I have a problem in animate object.
I have made the character movement and I want to add the animation for that. I have try a lot of way to solve the problem but I can’t. The problem is: when I pressed the control button, my player stop at frame 1 of the animation. Although, my animation have 6 frames.
This is my code:
----------------------------------------------------------------------------------------- -- -- main.lua -- ----------------------------------------------------------------------------------------- -- Your code here -- walkSheet local walkSheetData = { width =30.4, height =43, numFrames =6, sheetContentWidth = 182, sheetContentHeight = 43 } local walkSheet = graphics.newImageSheet( "walk.png", walkSheetData ) local idleSheetData = { width =30.4, height =43, numFrames =1, sheetContentWidth =30.4, sheetContentHeight =43 } local idleSheet = graphics.newImageSheet( "idle.png", idleSheetData ) local jumpSheetData = { width =28, height =43, numFrames =3, sheetContentWidth=84, sheetContentHeight =43 } local jumpSheet = graphics.newImageSheet( "jump.png", jumpSheetData) local sequenceData = { { name = "walk", sheet = walkSheet, start = 1, count =6, time = 800, loopCount = 0}, { name = "idle", sheet = idleSheet, start = 1, count =1, time = 800, loopCount = 0}, { name = "jump", sheet = jumpSheet, start = 1, count =3, time = 800, loopCount = 0} } local player = display.newSprite( walkSheet, sequenceData ) player.x = display.contentWidth/2 ; player.y = display.contentHeight/2 player:setSequence( "walk" ) player:play() --keyboardEvent local upPressed = false local downPressed = false local leftPressed = false local rightPressed = false local function key( event) if (event.phase == "down") then if (event.keyName == "w") then upPressed = true elseif (event.keyName == "s") then downPressed = true elseif (event.keyName == "a") then leftPressed = true elseif (event.keyName == "d") then rightPressed = true end elseif (event.phase == "up") then player:setSequence("idle") player:play() if (event.keyName == "w") then upPressed = false elseif (event.keyName == "s") then downPressed = false elseif (event.keyName == "a") then leftPressed = false elseif (event.keyName == "d") then rightPressed = false end end end Runtime:addEventListener( "key", key) local function enterFrame(event ) if (upPressed) then player.y = player.y - 5 player:setSequence("walk") player:play() end if (downPressed) then player.y = player.y + 5 player:setSequence("walk") player:play() end if (leftPressed) then player.x = player.x - 5 player:setSequence("walk") player:play() end if (rightPressed) then player.x = player.x + 5 player:setSequence("walk") player:play() end end Runtime:addEventListener( "enterFrame", enterFrame )
I think it have some thing wrong here, a logic error. When I pressed the button, it repeat ( player:Play()…player:Play()…player:Play()… ) so my animation always stop at frame 1. I don’t know how to fix that problem.
Is someone help me please! Or if you have some better animation method let you teach me.
Thank you a lot to help me and so sorry because my English is not good, I am Vietnamese I use GG Translate. This is my first step in game development and I dont want to be defeated. I want to integrated all animation into my player( like walk, jump, attack…) and call it to use when I want. Please sympathize with me because I was asking so stupid.
Thanks you so much. Hope there will be a way to help me :)) It will be more good if you show me the example.