Каков наилучший способ зацикливания изображения с буферизацией? - PullRequest
0 голосов
/ 14 октября 2019

У меня игра с движущимся фоновым изображением. Он прокручивается мимо проигрывателя, но в конце изображения он делает что-то странное, где он частично обрабатывается. То, что я хотел бы, это какой-нибудь способ зациклить изображение навсегда, чтобы путь работал непрерывно во время работы таймера

enter image description here

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...