新的AffineTransform始终为零旋转。您正在添加90度旋转,因此动画的每个帧看起来都是相同的:图像从其正常方向旋转90度。
您需要计算当前的旋转角度。
// Instance variable intialized at zero.
double angle = 0.0;
// In your ActionListener timer handler increment the angle.
{
angle += Math.toRadians(5); // 5 degrees per 100 ms = 50 degrees/second
while (angle > 2 * Math.pi())
angle -= 2 * Math.pi(); // keep angle in reasonable range.
}
public void paint(Graphics g) {
// Just use the transform that's already in the graphics.
Graphics2d g2 = (Graphics2d) g;
g2.setToIdentity();
// The code for your other transforms is garbled in my browser. Fill in here.
g2.rotate(angle);
g2.drawImage(arm, t, null);
}希望这能让你更接近。
我要补充一点,100毫秒的帧速率相当慢。动画会显得生涩。平滑动作最多需要30毫秒或每秒30帧。使用GPU的游戏有时会超过100 fps。
在动画循环中尽可能避免使用new。它将需要垃圾收集器更频繁地运行。这可能会导致动画中出现断断续续的情况。