<< Chapter < Page | Chapter >> Page > |
Listing 5 . Set frame rate and display location. |
---|
gc.setShowFPS(true);//show FPS
////set frame rategc.setTargetFrameRate((int)(1000/targetDelta));
//Set drawing location. This is the location within// the game window where the sprite will be displayed.
spriteX = spriteWidth;spriteY = 0;
}//end init |
The update method is shown in Listing 6 . As indicated in the comments, the computation of totalTime in the method has nothing to do with the animation. Instead, it is used to display the clock timeas shown in Figure 2 .
Listing 6 . The update method. |
---|
public void update(GameContainer gc, int delta)
throws SlickException{//Note that the following is for clock time display
// only. It does not effect the animation.totalTime += delta;//update total time accumulator
}//end update |
The render method is shown in Listing 7 . The only thing that is new here is the call to the draw method on the Animation object.
Listing 7 . The render method. |
---|
public void render(GameContainer gc, Graphics g)
throws SlickException{g.setDrawMode(g.MODE_NORMAL);
g.setBackground(Color.gray);//Draw the currently selected animation image at the
// specified locationanimation.draw(spriteX,spriteY);
g.drawString("totalTime = "+totalTime/1000,10f,100f);}//end render
}//end class Slick0180 |
Powerful behavior
The behavior of the Animation object and its draw method is very powerful.
The image display schedule being managed by the Animation object is independent of the frame rate.
The Animation object does its thing, and the render method does its thing virtually independent of one another. When the render method decides that it is time to display an animation image, it calls the draw method on the Animation object.
The Animation object delivers the image that is scheduled for display at that point in time according to the predetermined animationschedule and the draw method causes the image to be displayed.
Overloaded draw methods
There are several overloaded versions of the draw method including versions to filter the colors and to change the width and height ofthe displayed image.
Best results
Now you know why, as mentioned earlier , best results are achieved by keeping targetDelta less than the display time ( duration ) for each sprite. If targetDelta is greater than the duration , some images will be skipped and not displayed in the proper sequence.
For example, if the Animation object is switching from one image to the next every 0.10 second, but the draw method is only being called every 0.13 seconds, some of the images in the sequence won'tbe displayed and the quality of the animation will probably be poor.
However, this is also dependent on the amount of change from one image to the next. Ifthe change from one image to the next is small, then skipping an occasional image might not matter that much.
Notification Switch
Would you like to follow the 'Anatomy of a game engine' conversation and receive update notifications?