The way of the animation!

Advanced game related topics
LarsG
Enthusiast
Enthusiast
Posts: 713
Joined: Mon Jun 02, 2003 1:06 pm
Location: Norway
Contact:

The way of the animation!

Post by LarsG »

I'm about to mess around with animation, and I was wondering what was everybody's favourite way of animation?!
I am thinking of images, sprites or whatever you fancy.
How you store the animation strip (images in one file, or several files), and how you use it, in terms of animation speed, timing etc.

Maybe I (and others too!!) can pickup a some pointers and/or code snippets to play around with...

-Lars

AMD Athlon XP2400, 512 MB RAM, Hercules 3D Prophet 9600 256MB RAM, WinXP
PIII 800MHz, 320 MB RAM, Nvidia Riva Tnt 2 Mach 64 (32MB), WinXP + Linux
17" iMac, 1.8 GHz G5, 512 MB DDR-RAM, 80 GB HD, 64 MB Geforce FX 5200, SuperDrive, OSX
User avatar
J. Baker
Addict
Addict
Posts: 2196
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Post by J. Baker »

I believe you're talking about 2D images for games but a nice piece of software for animating 3D files is Character FX. Only 15 US dollars too.
http://www.insanesoftware.de/
LarsG
Enthusiast
Enthusiast
Posts: 713
Joined: Mon Jun 02, 2003 1:06 pm
Location: Norway
Contact:

Post by LarsG »

Yes, I was talking about 2D animation. Allthough this Character FX program seems nice.
I've heard of it before, but I allways thought this was a professional (read expensive) piece of software. :) Maybe Iæll buy it... :wink:

But I wasn't speaking of software in my last post. I was leaning more towards how people used animation in their programs. How they set it up (constant wise), and how they did their timing, etc...

But thanks anyway J.B. :)

-Lars

AMD Athlon XP2400, 512 MB RAM, Hercules 3D Prophet 9600 256MB RAM, WinXP
PIII 800MHz, 320 MB RAM, Nvidia Riva Tnt 2 Mach 64 (32MB), WinXP + Linux
17" iMac, 1.8 GHz G5, 512 MB DDR-RAM, 80 GB HD, 64 MB Geforce FX 5200, SuperDrive, OSX
Kale
PureBasic Expert
PureBasic Expert
Posts: 3000
Joined: Fri Apr 25, 2003 6:03 pm
Location: Lincoln, UK
Contact:

Post by Kale »

Here is a very small example of one way to do it: http://www.garyw.uklinux.net/PB/Sprite%20Viewer.zip I've use a timing method called forced timing to know when events or animation take place on screen, this makes sure the animation plays at the same speed regardless of cpu. There are other ways of doing this. Also i prefer any animated sprites to be kept in one file then clipped up in the code :)
--Kale

Image
LarsG
Enthusiast
Enthusiast
Posts: 713
Joined: Mon Jun 02, 2003 1:06 pm
Location: Norway
Contact:

Post by LarsG »

Thanks Kale.. :)

-Lars

AMD Athlon XP2400, 512 MB RAM, Hercules 3D Prophet 9600 256MB RAM, WinXP
PIII 800MHz, 320 MB RAM, Nvidia Riva Tnt 2 Mach 64 (32MB), WinXP + Linux
17" iMac, 1.8 GHz G5, 512 MB DDR-RAM, 80 GB HD, 64 MB Geforce FX 5200, SuperDrive, OSX
Num3
PureBasic Expert
PureBasic Expert
Posts: 2812
Joined: Fri Apr 25, 2003 4:51 pm
Location: Portugal, Lisbon
Contact:

Post by Num3 »

Check out PURETOOLS I from Danilo, he has a module to handle animations which is very good, here are the available commands:

AnimSprite Overview
AnimSprite
CreateAnimSprite() Create an AnimSprite out of a PureBasic sprite
DisplayAnimSprite() Display an animated sprite

Animation Control - Automation

SetAnimLoopDelay() Set the delay time between frames
SetAnimLoopDirection() Set the direction for automatic frame animation


Animation Control - Frames


SetAnimFrame() Set a new current frame in the AnimSprite
NextAnimFrame() Set the animation to the next frame
PrevAnimFrame() Set the animation to the previous frame


Animation Control - Directions

SetAnimDirection() Set a new current direction in the AnimSprite
NextAnimDirection() Set the animation to the next direction
PrevAnimDirection() Set the animation to the previous direction

Animation Collision Checking

CollisionAnimAnim() Check collision between 2 AnimSprites
CollisionAnimSprite() Check collision AnimSprite vs. Sprite
CollisionSpriteAnim() Check collision Sprite vs. AnimSprite

Get Animation Info

CurrentAnimFrame() Get the currently used frame number
CurrentAnimDirection() Get the currently used direction number
AnimFrameCount() Get the count of frames in an AnimSprite
AnimDirectionCount() Get the count of directions in an AnimSprite
AnimLoopDelay() Get the current delay between frames
AnimLoopDirection() Get the current direction for automatic animation


Here's a code example:

Code: Select all

InitSprite()
InitKeyboard()
InitMouse()

If OpenScreen(800,600,32,"TEST") = 0    ; test 32bit
 If OpenScreen(800,600,24,"TEST") = 0   ; if 32bit failed, test 24bit
  If OpenScreen(800,600,16,"TEST") = 0  ; if 32/24 failed, try 16bit screen
     MessageRequester("ERROR","Cant open 16/24/32bit Screen",0):End
  EndIf
 EndIf
EndIf

   ; limit Speed
   SetFrameRate(20)

   ; Load Anim-Sprites
   CatchSprite(1,?Soldier,0)
   TransparentSpriteColor(1,255,255,255)
   CreateAnimSprite(Soldier.AnimSprite,1,57,59)
   SoldierX = 500 : SoldierY = 400

   CatchSprite(2,?Fighter,0)
   TransparentSpriteColor(2,255,255,255)
   CreateAnimSprite(Fighter.AnimSprite,2,119,89)
   FighterX = 400 : FighterY = 380



Repeat
     FlipBuffers()
     If IsScreenActive()
       ClearScreen($66,$66,$66)
       R = 0 : G = 0 : B = 0

       DisplayAnimSprite(Soldier,SoldierX,SoldierY)
       DisplayAnimSprite(Fighter,FighterX,FighterY)
       
       If CollisionAnimAnim(Fighter,FighterX,FighterY,Soldier,SoldierX,SoldierY): Dead = 1: EndIf
       If Dead = 1
          NextAnimFrame(Soldier): frame + 1
          If frame = 10: Quit = 1: EndIf
       EndIf
       If DoAnim = 1: NextAnimFrame(Fighter): EndIf


       ; KEYBOARD CHECK
       ;
       ExamineKeyboard()
       If KeyboardPushed(#PB_Key_Right): DoAnim = 1: EndIf
       sleep_(1)
   Else
       sleep_(200)
   EndIf
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
Beep_(1400,50): Delay(1500)
End

Soldier:
IncludeBinary "Soldier.bmp"
Fighter:
IncludeBinary "Fighter.bmp"
 
[/size]
LarsG
Enthusiast
Enthusiast
Posts: 713
Joined: Mon Jun 02, 2003 1:06 pm
Location: Norway
Contact:

Post by LarsG »

Yes Num3, thanks for the reply..
I allready got PureTools from Danilo earlier today.. :p

-Lars

AMD Athlon XP2400, 512 MB RAM, Hercules 3D Prophet 9600 256MB RAM, WinXP
PIII 800MHz, 320 MB RAM, Nvidia Riva Tnt 2 Mach 64 (32MB), WinXP + Linux
17" iMac, 1.8 GHz G5, 512 MB DDR-RAM, 80 GB HD, 64 MB Geforce FX 5200, SuperDrive, OSX
Post Reply