-1

オンラインで画像を見つけました ( 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);
}
4

1 に答える 1