Jump to content

View more

Image of the Day

The beast has a mighty searchlight of evil! #screenshotsaturday https://t.co/bzKepOojDL
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

Animation Class

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 destructivArts   Members   


Posted 28 April 2012 - 12:43 PM

Let me preface my question with this: I'm programming this in Java, but this feels like a language independent question, so even if you can't give me Java specific advice, I am experienced enough to adapt whatever you post to Java.

OK, with that out of the way:
I'm writing an animation class for my 2D platform game. Basically, all non-static objects will contain an animation object. The animation object has an ArrayList of Images that will be initialized at the creation of the object (parameters will specify file paths/extensions).
What I want to know is how to handle the actual playing of the animation. I have standardized my frame rate already, so I know that what my FPS is and dont need to specify time per frame of animation. What I need to figure out is how to handle the different animations of the game objects. eg. The player is still so it only displays frames 1-5. Then the player hits the left arrow key, so it starts playing the run animation which is frames 6-15. I haven't created an Object/Player/Enemy etc. class yet, so I can build them around this animation, so whatever seems best will get implemented.

Any Help is greatly appreciated,

Oh, and just to clarify, this is the code for my animation class so far:
package platform.game;
import java.awt.*;
import java.awt.Image;
import java.util.ArrayList;
public class Animation {
    private ArrayList<Image> frames = new ArrayList<Image>();
    private int currentFrame;
    public Animation(String path, String ext){
	    currentFrame = 0;
    //Returns Current Frame
    public Image getFrame(){
	    return frames.get(currentFrame);

"Other than that, I have no opinion."
My Blog - Check it Out

#2 AlanSmithee   Members   


Posted 28 April 2012 - 01:31 PM

What i do is simply set flags according to input and actual movement and then set the what frames to be animated according to what flags are active, like:

First when getting input:
if (Left key was pressed)
flags = movingLeft;
(Also be sure to set these flags to false when the key is released, you can avoid conflicitng animations by checking like if movingLeft && movingRight later)

then later you set the animation cycle during logic handling:
if (movingLeft)
startFrame = 16; // 16 is just an exmaple
if (something else)
StartFrame = something else;

frame = startFrame;
(Also depending on your game maybe your character can move in diagonal directions which would require you to check for multiple flags. And also objects might have other animation cycles then just walking for lets say fighting or something that could work the same way)

Then the actual rendering:

if (frame >= startFrame + numbOfFramesInAnimationCycle)
frame = startFrame;

blit(frame, screen, x, y);
(You would ofcourse incorperate frame times and so on but you said you already have that figured out.)

So this is just one way of doing it im not sure if it's even a good way, it does have a tendancy to require you to write alot of repeating code, but it might help you get started. Posted Image

Edited by AlanSmithee, 28 April 2012 - 01:34 PM.

#3 Plutonium   Members   


Posted 28 April 2012 - 01:32 PM

I used this tutorial for animation http://youtu.be/wb1q7Mqosy4 . For example you will have Player, which could running, walking and standing. So, create arrayList in player class width animations, and each animation will have it own set of images. Now just use booleans to change animation states and done.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.