オンラインで画像を見つけました ( http://i.stack.imgur.com/y1oT4.png )。太陽と空を取り、それらを画面の中心で回転させようとしています。光線が回転しているように見えます。
タイマーで動きを制御したいのですが、任意の角度で回転させる方法がわかりません。つまり、90 単位で回転する (幅と高さを切り替える) 方法は知っていますが、私がしようとしているのは、一連のオブジェクトをグループ化し、それらを 1 点を中心に回転させることです。
私は周りを見回して AffineTransform() メソッドを見つけましたが、これが本当に必要なものなのか、必要な場合はどのように使用するのかわかりません。
編集:これで問題は解決しますか? Javaでグラフィックスを回転させる方法試して更新します。
編集:それは私を近づけましたが、修正しませんでした。次のランタイム エラーが返されます。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at FallScene.rotateBack(FallScene.java:77)
at SceneDriver$1TimerListener.actionPerformed(SceneDriver.java:66)
at javax.swing.Timer.fireActionPerformed(Timer.java:312)
at javax.swing.Timer$DoPostEvent.run(Timer.java:244)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Press any key to continue...
FallScene.rotateBack(FallScene.java:77) での呼び出しは次のとおりです。
bg.rotate(Math.toRadians(deg));
...次の場所に移動します。
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// Get the size of the component window
int w = getWidth();
int h = getHeight();
// The Graphics2D object for the BACKGROUND
Graphics2D bg = (Graphics2D)g;
// Sun
Color solarYellow = new Color(255, 218, 0);
bg.setPaint(solarYellow);
Ellipse2D.Double sun = new Ellipse2D.Double((w / 2) - 150, (h / 2) - 150, 300, 300);
bg.fill(sun); bg.draw(sun);
}