use*_*696 0 java animation swing
解:
是的,这是错的.永远,永远,永远,绝不读取绘画方法中的文件/图像.这种方法必须非常快,并且必须只涉及绘画,这样做,读取文件,会不必要地将GUI放慢速度.为什么这样呢?您可以在构造函数或方法中一次读取图像,然后根据需要多次重复使用paintComponent中的图像对象.
另外,您可能最好将图像作为资源而不是文件获取.
谢谢,气垫船充满了鳗鱼
我正在创建一个非常简单的'Fruit Ninja'版本.一种游戏,其中一些水果飞到屏幕上,用户必须将其切成两半.
我正在使用带有ImageIcon的JLabel作为水果.我使用摇摆计时器进行移动.
它运行得很好,也有动画,但这里是棘手的部分.当我添加背景图像时,动画是非常迟钝的.
问题是:如何添加背景图像,而摆动动画不会失去性能?
我在下面添加了一些代码.
蒂姆
我在JPanel中绘制背景图片:
public class PlayingField extends javax.swing.JPanel {
public PlayingField()
{
this.setBounds(0, 50, 500, 500);
this.setLayout(null);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
BufferedImage img = null;
try {
img = ImageIO.read(new File(System.getProperty("user.dir")+"/assets/background.png"));
} catch (IOException e)
{
}
g.drawImage(img, 0, 0, null);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在绘制的对象只是带有ImageIcons的简单JLabel.
我有一个处理动画的计时器:
public class GameTimer extends javax.swing.Timer implements ActionListener {
GameController gameController;
public GameTimer(GameController gameController) {
super(delay, null);
this.addActionListener(this);
this.gameController = gameController;
}
@Override
public void actionPerformed(ActionEvent e)
{
gameController.moveObject();
}
}
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是移动对象的代码:
public void moveObject()
{
activeObject.setPositionY((activeObjectView.getPositionY()+1));
playingField.repaint();
}
Run Code Online (Sandbox Code Playgroud)
是的,这是错的.永远,永远,永远,绝不读取绘画方法中的文件/图像.这种方法必须非常快,并且必须只涉及绘画,这样做,读取文件,会不必要地将GUI放慢速度.为什么这样呢?您可以在构造函数或方法中一次读取图像,然后根据需要多次重复使用paintComponent中的图像对象.
另外,您可能最好将图像作为资源而不是文件获取.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |