【发布时间】:2014-12-11 07:58:50
【问题描述】:
我正在尝试使用 JFrame 中的 spritesheet 获取动画。问题是一旦加载,图像就不会改变。它只显示第一张图片。 我进行了很多搜索并尝试了几乎所有的建议,但无法让它发挥作用。
顺便说一下,getSprite 的返回类型是 Image。 当我在 JFrame 中执行所有操作时,只显示一张图像。当我在扩展 JPanel 的单独类中执行此操作时,我只得到一个白色窗口。
更新 1:感谢 andrew,让 JFrame 正常工作。也修复了我的旧部分。这是工作的code at ideone
更新 2: 这是我的带有计时器的版本。
class TestSpriteSheet extends JFrame{
//same old variables
public TestSpriteSheet(){
//same old stuff goes here before this
add(new PanelSprite(this, ss));
this.setVisible(true);
}
}
class PanelSprite extends JPanel{
private long runningTime = 0;
private int fps = 3;
private boolean stop = false;
private SpriteSheetManager ss;
private TestSpriteSheet temp;
public PanelSprite(TestSpriteSheet test, SpriteSheetManager sm){
ss = sm;
temp = test;
setSize(180,180);
setLayout(new BorderLayout()); init();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
long time = 5000;
animate_with_gfx(g, time);
}
public void init(){
Timer t = new Timer((int)(1000/fps), new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(!stop) {
repaint();
} else {
((Timer)e.getSource()).stop();
}
}
});
t.setRepeats(true);
t.setDelay((int)(1000/fps));
t.start();
}
public void animate_with_gfx(Graphics g, long time){
if(runningTime <= time){
try {
System.out.println(runningTime); //Checking if this part works
int x = 0; int y = 0;
g.drawImage(ss.getSprite(x, y), 40, 40, null);
x++; y++; runningTime+=(1000/fps);
}catch (Exception ex) {
ex.printStackTrace();
}
}
else{
stop = true;
}
}
}
【问题讨论】:
标签: java swing animation jframe paintcomponent