Created
April 8, 2019 21:06
-
-
Save chrisdugne/e62845061360c88c9dc7361120e5f1bf to your computer and use it in GitHub Desktop.
Demo corona spritesheet animation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local Spirit = {} | |
local idle = { | |
name = 'idle/18', | |
frames = { | |
{x = 0, y = 0, width = 111,height = 172}, | |
{x = 111, y = 0, width = 111,height = 172}, | |
{x = 222, y = 0, width = 111,height = 172}, | |
{x = 0, y = 172,width = 111,height = 172}, | |
{x = 111, y = 172,width = 111,height = 172}, | |
{x = 222, y = 172,width = 111,height = 172}, | |
{x = 333, y = 0, width = 111,height = 172}, | |
{x = 333, y = 172,width = 111,height = 172} | |
}, | |
sheetContentWidth = 444, | |
sheetContentHeight = 344 | |
} | |
local glasses = { | |
name = 'with-glasses', | |
frames = { | |
{x = 0, y = 0, width = 111, height = 172} | |
}, | |
sheetContentWidth = 111, | |
sheetContentHeight = 172 | |
} | |
local eat = { | |
name = 'eat/18', | |
frames = { | |
{x = 0, y = 0, width = 112, height = 178}, | |
{x = 112, y = 0, width = 112, height = 178}, | |
{x = 224, y = 0, width = 112, height = 178}, | |
{x = 336, y = 0, width = 112, height = 178}, | |
{x = 448, y = 0, width = 112, height = 178}, | |
{x = 560, y = 0, width = 112, height = 178}, | |
{x = 672, y = 0, width = 112, height = 178}, | |
{x = 0, y = 178, width = 112, height = 178}, | |
{x = 112, y = 178, width = 112, height = 178}, | |
{x = 224, y = 178, width = 112, height = 178}, | |
{x = 336, y = 178, width = 112, height = 178}, | |
{x = 448, y = 178, width = 112, height = 178}, | |
{x = 560, y = 178, width = 112, height = 178}, | |
{x = 672, y = 178, width = 112, height = 178}, | |
{x = 0, y = 356, width = 112, height = 178}, | |
{x = 112, y = 356, width = 112, height = 178}, | |
{x = 224, y = 356, width = 112, height = 178}, | |
{x = 336, y = 356, width = 112, height = 178}, | |
{x = 448, y = 356, width = 112, height = 178} | |
}, | |
sheetContentWidth = 784, | |
sheetContentHeight = 534 | |
} | |
local turn = { | |
name = 'turn/18', | |
frames = { | |
{x = 0, y = 0, width = 111, height = 172}, | |
{x = 111, y = 0, width = 111, height = 172}, | |
{x = 222, y = 0, width = 111, height = 172}, | |
{x = 333, y = 0, width = 111, height = 172}, | |
{x = 444, y = 0, width = 111, height = 172}, | |
{x = 555, y = 0, width = 111, height = 172}, | |
{x = 666, y = 0, width = 111, height = 172}, | |
{x = 777, y = 0, width = 111, height = 172}, | |
{x = 0, y = 172, width = 111, height = 172}, | |
{x = 111, y = 172, width = 111, height = 172}, | |
{x = 222, y = 172, width = 111, height = 172}, | |
{x = 333, y = 172, width = 111, height = 172}, | |
{x = 444, y = 172, width = 111, height = 172}, | |
{x = 555, y = 172, width = 111, height = 172}, | |
{x = 666, y = 172, width = 111, height = 172}, | |
{x = 777, y = 172, width = 111, height = 172}, | |
{x = 0, y = 344, width = 111, height = 172}, | |
{x = 111, y = 344, width = 111, height = 172}, | |
{x = 222, y = 344, width = 111, height = 172}, | |
{x = 333, y = 344, width = 111, height = 172}, | |
{x = 444, y = 344, width = 111, height = 172}, | |
{x = 555, y = 344, width = 111, height = 172}, | |
{x = 666, y = 344, width = 111, height = 172}, | |
{x = 777, y = 344, width = 111, height = 172}, | |
{x = 0, y = 516, width = 111, height = 172}, | |
{x = 111, y = 516, width = 111, height = 172}, | |
{x = 222, y = 516, width = 111, height = 172}, | |
{x = 333, y = 516, width = 111, height = 172}, | |
{x = 444, y = 516, width = 111, height = 172}, | |
{x = 555, y = 516, width = 111, height = 172}, | |
{x = 666, y = 516, width = 111, height = 172}, | |
{x = 777, y = 516, width = 111, height = 172}, | |
{x = 0, y = 688, width = 111, height = 172}, | |
{x = 111, y = 688, width = 111, height = 172}, | |
{x = 222, y = 688, width = 111, height = 172}, | |
{x = 333, y = 688, width = 111, height = 172}, | |
{x = 444, y = 688, width = 111, height = 172} | |
}, | |
sheetContentWidth = 888, | |
sheetContentHeight = 860 | |
} | |
local cry = { | |
name = 'cry/18', | |
frames = { | |
{x = 0, y = 0, width = 111, height = 172}, | |
{x = 111, y = 0, width = 111, height = 172}, | |
{x = 222, y = 0, width = 111, height = 172}, | |
{x = 333, y = 0, width = 111, height = 172}, | |
{x = 444, y = 0, width = 111, height = 172}, | |
{x = 555, y = 0, width = 111, height = 172}, | |
{x = 666, y = 0, width = 111, height = 172}, | |
{x = 777, y = 0, width = 111, height = 172}, | |
{x = 888, y = 0, width = 111, height = 172}, | |
{x = 0, y = 172, width= 111, height = 172}, | |
{x = 111, y = 172, width = 111, height = 172}, | |
{x = 222, y = 172, width = 111, height = 172}, | |
{x = 333, y = 172, width = 111, height = 172}, | |
{x = 444, y = 172, width = 111, height = 172}, | |
{x = 555, y = 172, width = 111, height = 172}, | |
{x = 666, y = 172, width = 111, height = 172}, | |
{x = 777, y = 172, width = 111, height = 172}, | |
{x = 888, y = 172, width = 111, height = 172}, | |
{x = 0, y = 344, width= 111, height = 172}, | |
{x = 111, y = 344, width = 111, height = 172}, | |
{x = 222, y = 344, width = 111, height = 172}, | |
{x = 333, y = 344, width = 111, height = 172}, | |
{x = 444, y = 344, width = 111, height = 172}, | |
{x = 555, y = 344, width = 111, height = 172}, | |
{x = 666, y = 344, width = 111, height = 172}, | |
{x = 777, y = 344, width = 111, height = 172}, | |
{x = 888, y = 344, width = 111, height = 172}, | |
{x = 0, y = 516, width= 111, height = 172}, | |
{x = 111, y = 516, width = 111, height = 172}, | |
{x = 222, y = 516, width = 111, height = 172}, | |
{x = 333, y = 516, width = 111, height = 172}, | |
{x = 444, y = 516, width = 111, height = 172}, | |
{x = 555, y = 516, width = 111, height = 172} | |
}, | |
sheetContentWidth = 999, | |
sheetContentHeight = 688 | |
} | |
local idleSheet = graphics.newImageSheet( | |
'assets/images/game/spirit/' .. idle.name .. '.png', | |
idle | |
) | |
local glassesSheet = graphics.newImageSheet( | |
'assets/images/game/spirit/' .. glasses.name .. '.png', | |
glasses | |
) | |
local eatSheet = graphics.newImageSheet( | |
'assets/images/game/spirit/' .. eat.name .. '.png', | |
eat | |
) | |
local turnSheet = graphics.newImageSheet( | |
'assets/images/game/spirit/' .. turn.name .. '.png', | |
turn | |
) | |
local crySheet = graphics.newImageSheet( | |
'assets/images/game/spirit/' .. cry.name .. '.png', | |
cry | |
) | |
local sequences = { | |
{ | |
name = idle.name, | |
sheet = idleSheet, | |
start = 1, | |
count = #idle.frames, | |
time = 1000, | |
loopCount = 0, | |
loopDirection = 'bounce' | |
}, | |
{ | |
name = glasses.name, | |
sheet = glassesSheet, | |
start = 1, | |
count = #glasses.frames, | |
time = 1000, | |
loopCount = 0, | |
loopDirection = 'bounce' | |
}, | |
{ | |
name = eat.name, | |
sheet = eatSheet, | |
start = 1, | |
count = #eat.frames, | |
time = 800, | |
loopCount = 0, | |
loopDirection = 'bounce' | |
}, | |
{ | |
name = turn.name, | |
sheet = turnSheet, | |
start = 1, | |
count = #turn.frames, | |
time = 400, | |
loopCount = 1, | |
loopDirection = 'bounce' | |
}, | |
{ | |
name = cry.name, | |
sheet = crySheet, | |
start = 1, | |
count = #cry.frames, | |
time = 1200, | |
loopCount = 1, | |
loopDirection = 'forward' | |
} | |
} | |
function Spirit:create(options) | |
local spirit = display.newSprite( | |
options.parent, | |
idleSheet, | |
sequences | |
) | |
spirit.anchorX = 0.5 | |
spirit.anchorY = 1 | |
spirit.xScale = -1 | |
spirit.x = options.x | |
spirit.y = options.y | |
spirit.idle = function() | |
if(not spirit.setSequence) then return end | |
spirit:setSequence(idle.name) | |
spirit:play() | |
end | |
spirit.eat = function() | |
if(spirit.nextSequence) then | |
timer.cancel(spirit.nextSequence) | |
end | |
spirit:setSequence(eat.name) | |
spirit:play() | |
spirit.nextSequence = timer.performWithDelay(1600, spirit.idle) | |
end | |
spirit.turn = function() | |
if(spirit.nextSequence) then | |
timer.cancel(spirit.nextSequence) | |
end | |
if(not spirit.setSequence) then return end | |
spirit:setSequence(turn.name) | |
spirit:play() | |
spirit.nextSequence = timer.performWithDelay(800, spirit.idle) | |
end | |
spirit.cry = function() | |
if(spirit.nextSequence) then | |
timer.cancel(spirit.nextSequence) | |
end | |
if(not spirit.setSequence) then return end | |
spirit:setSequence(cry.name) | |
spirit:play() | |
spirit.nextSequence = timer.performWithDelay(1200, spirit.idle) | |
end | |
spirit.disappear = function() | |
spirit:turn() | |
transition.to(spirit, { | |
xScale = 0, | |
yScale = 0, | |
time = 800, | |
onComplete = function() | |
display.remove(spirit) | |
end | |
}) | |
end | |
spirit.appear = function() | |
spirit:turn() | |
spirit:scale(0, 0) | |
transition.to(spirit, { | |
xScale = -2, | |
yScale = 2, | |
time = 800 | |
}) | |
end | |
return spirit | |
end | |
return Spirit |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment