У меня игра с движущимся фоновым изображением. Он прокручивается мимо проигрывателя, но в конце изображения он делает что-то странное, где он частично обрабатывается. То, что я хотел бы, это какой-нибудь способ зациклить изображение навсегда, чтобы путь работал непрерывно во время работы таймера
public Game() {
try {
fullBackground = ImageIO.read(new File(BACKGROUND_IMAGE));
} catch (IOException e) {
System.out.println("ASSET LOADING PROBLEM");
}
background = new BufferedImage(PANEL_WIDTH, PANEL_HEIGHT, BufferedImage.TYPE_INT_ARGB);
offset = new Point2D.Double(0, (fullBackground.getHeight() - PANEL_HEIGHT) * -1.0);
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
addKeyListener(this);
player = new Player();
time = new Timer(TIMER_SPEED, this);
time.start();
}
Здесь я пересчитываю, какую часть изображения показывать:
public void recalculateBackground() {
Graphics g = background.getGraphics();
g.drawImage(fullBackground, ((int) offset.getX()), ((int) offset.getY()), null);
offset = new Point2D.Double(offset.getX() - 2, offset.getY() + 1);
}
Вот этот компонент краски:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
//paint background
recalculateBackground();
recalculateSpritePositions();
checkCollisions();
Image playerImage = player.getImage();
g2d.drawImage(background, 0, 0, this);
g2d.drawImage(playerImage, ((int) player.getX()), ((int) player.getY()), this);
}