Jump to content
  • Advertisement
Sign in to follow this  
  • entries
    455
  • comments
    639
  • views
    424356

Animotion babeh!

Sign in to follow this  
_the_phantom_

110 views

So, I've been putting off doing animated sprites as I didn't know how I was going to handle the loading and frame selection aspect of them.

I was going to use a tool I was told about after I posted a thread asking for a program to generate sprite sheets and a definition file which gives details, however in the end I decided against that, in part because I wasn't getting on with the method it uses to define where sprites are.

Then I considered rolling my own tool, but didn't fancy working out how to get a GTL loaded image to display in C#, well at least sanely, so decided against that plan for now. However, the tool will get written at a later date.

In the end I settled for just telling it that there are 8 frames in the image, because right now that's all I need to do.

Some code writing and binding later and we have animated explosions going on.. yay!

Loading and defining in Lua is pretty simple;

-- spr is a table which holds all the sprite related information
spr = eng:createSprite("explosion.png",8)

-- using the baseimg table from an earlier post as a base
spr = baseimg:new({x = 10, y = 10, sprite = spr, currentFrame = 0})

-- we need a table of sprites to render as the rendering routine takes batches
sprites = {spr}



The use of 'sprite' to hold the reference to the sprite data is manatory so that the drawing function knows where to look for the data.


I also took this moment to stick some timebased updates in, namely a 30 updates per second limit. This was a good test of the small timeGetTime() wrapper function, which until point hadn't been tested.

So, the final(?) test loop looks like this;

quit = false
text= ""
lastupdate = 0
lastexplodetime = 0
while(quit == false)
do
events = bonsai.getEvents()
for i = 1, #events
do
if events.message == bonsai.Event.types.quit
then
quit = true
end
if events.message == bonsai.Event.types.char
then
char = bonsai.Event.charTranslate[events.param1]
if char ~= nil then text = text .. char end
end
end

eng:startFrame()
eng:renderQuads(imgs)
eng:renderSprites(sprites)
eng:renderText(0,100,text,font,{r=0,g=255,b=255})

currentTime = bonsai.currentTimeMillis()
if lastupdate + 20 < currentTime
then
for k, v in pairs(imgs) do v:update() end
if lastexplodetime + 80 < currentTime
then
spr.currentFrame = spr.currentFrame + 1
if spr.currentFrame == spr.sprite.frames then spr.currentFrame = 0 end
lastexplodetime = currentTime
end
lastupdate = currentTime
end

eng:endFrame()
end



I believe, pending the creation of a few 'constant' colours I have enough code now to port the shoot 'em up from Java based to Bonsai based \o/

So, I guess I should get on it...
Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!