【发布时间】:2018-06-09 20:57:53
【问题描述】:
对于游戏,我需要实现侧滚动背景。 我已经尝试过了,但我的图片超出了框架。
我做错了什么?
import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import javax.imageio.ImageIO;
public class GameBoard extends JPanel {
private BufferedImage image;
private int imageCoordX = 0;
public GameBoard() throws Exception {
setBackground(new Color(0,0,86));
URL url = new URL("https://i.stack.imgur.com/P59NF.png");
image = ImageIO.read(url);
setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
ActionListener animListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
imageCoordX = imageCoordX + 10;
repaint();
}
};
Timer timer = new Timer(120, animListener);
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, imageCoordX, 0, null);
System.out.println(imageCoordX);
if (imageCoordX < 0) {
g.drawImage(image, image.getWidth() + imageCoordX, 0, null); //
}
if (imageCoordX > 0) {
g.drawImage(image, image.getWidth() - imageCoordX, 0, null);
}
}
public static void main(String[] args) {
Runnable r = () -> {
JFrame f = new JFrame("Animation of Gameboard");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
f.add(new GameBoard());
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
};
SwingUtilities.invokeLater(r);
}
}
【问题讨论】:
-
附带说明,到处使用常量字面量是一个非常糟糕的习惯。而不是
500, 500可能使用sizeX, sizeY。 -
我的图片是800*600。但是上面的代码也是同样的问题。
标签: java multithreading algorithm swing jpanel