Animation/Löve specs

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Post Reply
Figment
Prole
Posts: 5
Joined: Sat Aug 06, 2011 8:43 pm

Animation/Löve specs

Post by Figment »

Hello, I'm a artist/animator hobbyist. I have been using flash and flex library's for quite a while now. While flash is a great animators tool it lacks in performance when large objects are present on the stage, that kinda sucks when I'm trying to develop a fully vector based platformer.

So I was thinking of making the jump to lua, and Löve. Now what kind of features/methods does it have when it comes to animation and creating large stages with big images present? :o:

EDIT: Oh yea, I should probably specify the type of animation. I'm thinking frame by frame, image-based.
...just read the forum rules "read this", man i suck at forums. :x
User avatar
Trappingnoobs
Citizen
Posts: 95
Joined: Tue Oct 12, 2010 8:52 pm

Re: Animation/Löve specs

Post by Trappingnoobs »

Figment wrote:Hello, I'm a artist/animator hobbyist. I have been using flash and flex library's for quite a while now. While flash is a great animators tool it lacks in performance when large objects are present on the stage, that kinda sucks when I'm trying to develop a fully vector based platformer.

So I was thinking of making the jump to lua, and Löve. Now what kind of features/methods does it have when it comes to animation and creating large stages with big images present? :o:

EDIT: Oh yea, I should probably specify the type of animation. I'm thinking frame by frame, image-based.
...just read the forum rules "read this", man i suck at forums. :x
It's not hard to make on from a spritesheet, just a little math and trial and error realy.
Figment
Prole
Posts: 5
Joined: Sat Aug 06, 2011 8:43 pm

Re: Animation/Löve specs

Post by Figment »

It's not hard to make on from a sprite sheet, just a little math and trial and error really.
Got any videos/text tutorials on this so I can get a closer look at the process?
To see if it looks similar to any of my other work environments.
User avatar
Trappingnoobs
Citizen
Posts: 95
Joined: Tue Oct 12, 2010 8:52 pm

Re: Animation/Löve specs

Post by Trappingnoobs »

Figment wrote:
It's not hard to make on from a sprite sheet, just a little math and trial and error really.
Got any videos/text tutorials on this so I can get a closer look at the process?
To see if it looks familiar to any of my other work environments.
This'll only work for my class system, unless somone made a similar one, but here's my implementation. The first code block is for spritesheets, the second you just pass in an array of sprites. It's a bit rough and could be improved;

Code: Select all

Class "spritesheetAnimation" {

image,
cellWidth,
cellHeight,
["current"] = 1,
["framesPerUpdate"] = 5,
["maxFramesPerUpdate"] = 5,
["quads"] = {},
["parseSheet"] = function(s,Img,cw,ch)
	s.cellWidth = cw
	s.cellHeight = ch
	s.image = Img
	
	local amX = Img:getWidth()/cw
	local amY = Img:getHeight()/ch
	
	for y = 0, amY*ch-ch, ch do
		for x = 0, amX*cw-cw, cw do
			table.insert(s.quads, love.graphics.newQuad(x,y,cw,ch,Img:getWidth(),Img:getHeight()))
		end
	end
end,
["setFrames"] = function(s,fr)
	s.framesPerUpdate = fr
	s.maxFramesPerUpdate = fr
end,
["draw"] = function(s,x,y,w,h)
	local lq = s.quads[s.current]
	local w, h = w/s.cellWidth, h/s.cellHeight
	love.graphics.drawq(s.image,lq,x,y,0,w,h)
	love.graphics.print(s.current, 50,150,0,1,1)
end,

["update"] = function(s)
	s.framesPerUpdate = s.framesPerUpdate - 1
	if s.framesPerUpdate < 0 then
		s.framesPerUpdate = s.maxFramesPerUpdate
		s.current = s.current + 1
		if s.current > #s.quads then
			s.current = 1
		end
	end
end,
}

Code: Select all

Class "animation" {

["imageList"] = {},
["add"] = function(s,Img)
	table.insert(s.imageList,Img)
end,
["current"] = 1,
["framesPerUpdate"] = 5,
["maxFramesPerUpdate"] = 5,
["setFrames"] = function(s,fr)
	s.framesPerUpdate = fr
	s.maxFramesPerUpdate = fr
end,
["draw"] = function(s,x,y,w,h)
	local im = s.imageList[current]
	
	if h then
		local w = w/im:getWidth()	--Fix scale so we can draw via pixels
		local h = h/im:getHeight()
	else
		local h,w = im:getHeight(), im:getWidth()
	end
	
	love.graphics.draw(im,x,y,0,w,h)
end,

["update"] = function(s)
	s.framesPerUpdate = s.framesPerUpdate - 1
	if s.framesPerUpdate > 0 then
		s.framesPerUpdate = s.maxFramesPerUpdate
		s.current = s.current + 1
		if s.current > #s.imageList then
			s.current = 1
		end
	end
end,
}
Figment
Prole
Posts: 5
Joined: Sat Aug 06, 2011 8:43 pm

Re: Animation/Löve specs

Post by Figment »

Thanks! wow that code looks messy :crazy:
Guess I got some work to do.
User avatar
nevon
Commander of the Circuloids
Posts: 938
Joined: Thu Feb 14, 2008 8:25 pm
Location: Stockholm, Sweden
Contact:

Re: Animation/Löve specs

Post by nevon »

You could take a look at AnAL for a fairly simple animation implementation.
User avatar
kikito
Inner party member
Posts: 3153
Joined: Sat Oct 03, 2009 5:22 pm
Location: Madrid, Spain
Contact:

Re: Animation/Löve specs

Post by kikito »

@Trappingnoobs, you are frightening the new guy.

@Figment: the LÖVE core doesn't come with any built-in help for making animations; just for making quads out of an image, and displaying them (like with sprites).

However! There's a Lua-implemented lib called AnAL that builds on top of that functionality and offers animations.

Also, please note that Trappingnoob is only displaying how he does things. He's forgotten to mention that he's using an object-oriented library, which is not part of LÖVE or Lua.

And yes, his code is a bit messy :P

Edit: ninja'd by nevon
When I write def I mean function.
Figment
Prole
Posts: 5
Joined: Sat Aug 06, 2011 8:43 pm

Re: Animation/Löve specs

Post by Figment »

.. AnAL Love? This just gets better and better lawl.
Anyway I found this great "swf to sprite sheet" converter, if anyone is interested: http://easeljs.com/zoe.html

How well does it handle large sheets? I played a couple games which featured some fairly large graphics and it was lagging pretty badly.(my computer specs are above average)
is it possible to remove that witch is not shown on the "main stage" then add it when needed? In ex. scrolling games.

oh one more thing, do any potential players need to download löve to play the end product .löve files?
User avatar
kikito
Inner party member
Posts: 3153
Joined: Sat Oct 03, 2009 5:22 pm
Location: Madrid, Spain
Contact:

Re: Animation/Löve specs

Post by kikito »

Figment wrote:How well does it handle large sheets? I played a couple games which featured some fairly large graphics and it was lagging pretty badly.(my computer specs are above average)
As far as I know, LÖVE's policy is basically "give as much work as possible to the graphics card". I believe that includes handling sheets; but I'm not sure. If that was the case, a file with large spritesheets would run just fine in some computers and not at all in others.

Also, regarding the size, read this: PO2_Syndrome
Figment wrote:is it possible to remove that witch is not shown on the "main stage" then add it when needed? In ex. scrolling games.
LÖVE doesn't have an "automatic image splitter", if that's what you are asking. If you want to present, say, a 400000x400000px background, the best way to do that would be splitting the background into smaller images. LÖVE doesn't do the "splitting" automatically for you.
Figment wrote:oh one more thing, do any potential players need to download löve to play the end product .löve files?
.love files can be "attached" to the love.exe executable so the final game looks like a regular exe file; or so I've heard - I've never tried that myself.
Last edited by kikito on Sun Aug 07, 2011 12:46 pm, edited 1 time in total.
When I write def I mean function.
Figment
Prole
Posts: 5
Joined: Sat Aug 06, 2011 8:43 pm

Re: Animation/Löve specs

Post by Figment »

Thanks everybody, this has been most informative. :awesome:
I will be messing around with it once I have dug a little deeper into lua.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest