アニメーションというのはちょっとずつ違った画像を一定時間ごとに書き直すことで実現します。基本は「一定時間ごとに再描画の契機を設ける」ことと「時間経過に応じた図形内容の再計算・再描画」になります。再描画は適当なJComponentのpaintComponentメソッドに実装することになるでしょう。
java.awt.Timerを使うとよいでしょう。インターバルを指定できますので例えば0.1秒ごとに再描画といったことができます。
時間経過に従い軌道中心からみた角度が変化すると考えればよいですね。一番奥の位置を0度、一番手前を180度と考えると以下の計算になります。角度の単位はラジアンなのでdegree(1周が360度)をパラメーターとしたいならradian = Math.toRadians(degree)
を使います。
int x = xCenter + (int)(Math.sin(角度)*軌道長半径)
int y = yCenter - (int)(Math.cos(角度)*軌道短半径)
透視投影の考え方を用いて視点からの距離によって遠くにあるほど小さくなるような計算をします。視点からの距離をDとするとアイコンの見かけ上の大きさはDに反比例します。
double D = Dmin + (Dmax - Dmin) / 2 * Math.cos(角度)
といった感じで距離が求められるのでそこからアイコンの大きさを計算します。アイコンの画像(java.awt.Image)をスケーリングしつつ描画するには例えば以下が使えるでしょう。
Graphics#drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/10 07:49
2017/02/13 00:56