我正在尝试创建一个按给定参数影响动画的类。
像这个Rotate r = new Rotate(250)
,但我不能正确使用计时器,我知道有类似的问题,但无论如何我无法解决问题。我可以旋转,但不能确定何时停止。这是基本代码:
public class Rotate extends JPanel {
public Rotate(int angle){
}
@Override
public void paintComponent(Graphics g ) {
int drawLocationX = 55;
int drawLocationY = 111;
BufferedImage image = LoadImage("cutted.png");
AffineTransform at = AffineTransform.getTranslateInstance(drawLocationX,drawLocationY);
at.rotate(angle, image.getWidth()/2, image.getHeight()/2);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, at, null);
revalidate();
repaint();
}
BufferedImage LoadImage (String FileName){
BufferedImage img = null;
try{
img = ImageIO.read(new File(FileName));
}
catch(IOException e){
}
return img;
}
}
答案 0 :(得分:1)
从不:
以绘画方式阅读图像。每次要绘制组件时读取图像效率都很低。读取类的构造函数中的图像,并将图像保存为实例变量。
在绘画方法中调用revalidate()或repaint()。这将导致无限循环。
我正在尝试创建一个影响动画的类
然后你需要使用Swing Timer来安排动画。当计时器触发时,您需要更改角度。所以在你的课堂上你可能需要添加一些方法,比如getAngle()和setAngle(...)。
setAngle()可能如下所示:
public void setAngle(int angle)
{
this.angle = angle;
repaint();
}
因此,当Timer触发时,您只需调用:
myPanel.setAngle( myPanel.getAngle() + 1 );
但无法确定何时停止
不知道这对你意味着什么。你想在360度或旋转后停下来吗?然后你需要在Timer代码中保留一个计数器,以便在它激发360次后停止该计时器。