I am a java noob, so please bear with me. For the past two weeks, I have found it difficult to cycle through images. I am Working on a simple 2D game, where I need the character to "walk". I have four Classes, Board, Character,Enemy, and Main(runs program).

In the Character Class, this is a part of the method I have:

public void keyPressed(KeyEvent e)

int key = e.getKeyCode():

if(key == KeyEvent.VK_RIGHT){ dx=1

//need to cycle through 6 images here!

}

When I press the Right key, I need to have the character "walk" through 6 images, then, if I press the key again, the same needs to happen.

In the Board Class, I am using a Swing Timer with an update of 5ms.

This is a bit of an aside, but my Board Class is balooning into hundreds of lines of code to support all the "if" statments for enemies, and that's just the first screen! Is this normal? If I continue at this rate, at the end of the program, I will probably have a Board Class with thousands of lines of code.

An Animation class could wrap a bunch of images and have a counter to indicate which one should currently be showing. Your Characters and Enemies could have a currentAnimation, or you could do a full MVC approach. (I doubt you'll want the latter yet, but bear it in mind for your second game).

So what you are saying is I should create a new "Animation Class" which will control the character and enemy walk cycles. Roughly what methods should I have, and how do run through 6 sprites using a Swing Timer (In my Board Class) with a 5ms update. I am worried that the sprites will updated so fast, they will not be noticable.

I have seen a lot of talk about something called a "Thread." Do I need to use it? Do I use BufferedImage[] to store the six sprites? I have no idea what a "full MVC approach." A little more detail in your anwser(s) would be greatly appriciated.

Sorry for all the questions, but all I am able to do right now is a simple 2D game with a character, bulltes, enemies, and collision.

First of all, 5ms?!? Your game is going at 200FPS!! Try bringing it down to 16ms, 60FPS, that's all you'll ever need.

An Animation class holds an ArrayList of Images and usually has an update(long) method that updates the animation and a getImage() method that returns the current image in the Animation.

In your keyPressed method, you could set a boolean variable to true, so in your Timer, you would call the Animation's update method if that boolean is true, and in your paint method, you would draw the Image returned by the Animation's getImage() method.

Oh and MVC means Model-View-Controller, which basically means you separate the logic from the rendering from the data.

/** * Adds an image to the animation. * @param i The image to be added. * @param time The amount of time in milliseconds this image is displayed. */publicvoidaddFrame(Imagei, longtime) {totalTime += time;frames.add(newFrame(i,totalTime)); }

Damn, thanks a lot, there's no way I would of been able to come up with that by myself. I don't have much time today, but I will ahve a good look at your Class tomorrow, and see what I can come up with.

Just a quick question about organizing 2D games. Should each level have it's own Class, or is it best just to have one humongous Board Class? When it comes to soundeffects, I assume these would be simple return methods inside their respective Classes. So for example a MachineGun Class would hold all the sounds for this gun, instead of one one Sound Class that holds everything.

Thanks again for your help, I thought I was doomed with static images for all my 2D games!

And for sounds, it could be organized in any way you think is appropriate.I usually have a Sound class that contains a HashMap that maps Strings to Clips and I have a simple method called play(String).

You've just got to think things through one by one in an organized and OO way.

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org