85 lines
1.9 KiB
Lua
85 lines
1.9 KiB
Lua
animx=require 'animx'
|
|
|
|
--[[
|
|
WARNING: Constrain yourself only with the library functions. Don't
|
|
be inspired by how I implemented the movement part. We don't do jumping
|
|
animation simply because it'd only make the code more difficult to read
|
|
You can check up the modern platformer example for that!
|
|
]]
|
|
|
|
characterImage=love.graphics.newImage('character.png')
|
|
|
|
idleAnim=animx.newAnimation{
|
|
img=characterImage,
|
|
style='rough',
|
|
noOfFrames=1,
|
|
tileWidth=16
|
|
}
|
|
|
|
jumpAnim=animx.newAnimation{
|
|
img=characterImage,
|
|
frames={2,3}, --the animations consists of frame 2 and 3
|
|
tileWidth=16
|
|
}
|
|
|
|
walkAnim=animx.newAnimation{
|
|
img=characterImage,
|
|
startFrom=10,
|
|
noOfQuads=2,
|
|
delay=.2,
|
|
tileWidth=16
|
|
}:loop() --Try removing this loop
|
|
|
|
-- There are atleast three ways to add animations to an actor
|
|
|
|
--Method 1
|
|
alien=animx.newActor{
|
|
['idle']=idleAnim,
|
|
['walking']=walkAnim
|
|
}
|
|
:onSwitch(function(this,prevState)
|
|
print ((
|
|
"I was %s before but I'm %s now!"
|
|
):format(prevState,this.current))
|
|
end)
|
|
:switch('idle')
|
|
|
|
--Method 2:
|
|
alien:addAnimation('jumping',jumpAnim)
|
|
--Method 3:
|
|
alien:addAnimation('climbing',{
|
|
img=characterImage,
|
|
frames={6,7}, --another way of adding frames
|
|
tileWidth=16
|
|
})
|
|
alien:getAnimation('climbing'):loop()
|
|
|
|
ld=love.keyboard
|
|
|
|
function love.update(dt)
|
|
|
|
animx.update(dt)
|
|
|
|
if ld.isDown('right') or ld.isDown('left') then
|
|
alien:switch('walking')
|
|
alien:flipX(ld.isDown('left'))
|
|
alien.x=alien.x+200*dt*(ld.isDown('left') and -1 or 1)
|
|
elseif ld.isDown('up') or ld.isDown('down') then
|
|
alien:switch('climbing')
|
|
alien.y=alien.y+200*dt*(ld.isDown('up') and -1 or 1)
|
|
else
|
|
for i=1,1000000 do
|
|
--I call this function a million times and still no frame-drop!
|
|
alien:switch('idle')
|
|
--This is because this has no effect if alien is already idle!
|
|
end
|
|
end
|
|
end
|
|
|
|
--We exploit the fact that an actor in animX has no x and y members!
|
|
alien.x,alien.y=400,300
|
|
|
|
function love.draw()
|
|
alien:render(alien.x,alien.y,0,10,10,8,8)
|
|
love.graphics.print(love.timer.getFPS())
|
|
end |