Wraparound Ribbons

A Ribbon object manages a wraparound, movable image, which should be wider than the game panel. This width requirement is important for the amount of work needed to draw the image as it wraps around the JPanel.

A wide image means that its display on-screen requires, at most, two drawImage() calls (with associated calculations for the coordinates and image dimensions): one to draw the tail of the image on the left side and the other for its start on the right. If the image is narrower than the panel, then three drawImage() calls (or more) might be needed, with an increase in the number of calculations.

Furthermore, if the panel width is constant, as here, then some parts of the calculations need only be carried out once and can be reused after that.

The constructor of this class initializes the graphic, its moveSize value, two movement flags, and a position variable called xImHead:

 // globals private BufferedImage im; private int width; // the width of the image (>= pWidth) private int pWidth, pHeight; // dimensions of display panel private int moveSize; // size of the image move (in pixels) private boolean isMovingRight; // movement flags private boolean isMovingLeft; private int xImHead; // panel position of image's left side public Ribbon(int w, int h, BufferedImage im, int moveSz) { pWidth = w; pHeight = h; this.im = im; width = im.getWidth(); // no need to store the height if (width < pWidth) System.out.println("Ribbon width < panel width"); moveSize = moveSz; ...

Get Killer Game Programming in Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.