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; ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access