よりシンプルなKeyFrame
ここではforを使って多数のKeyFrame
を作成していましたが、そもそも「キーフレーム」というのは、キーとなるフレームであり、「すべてのフレームを用意しなくとも、キーとなるいくつかのフレームを用意しておくことで滑らかなアニメーションが可能となる」はずのものです。全フレームを用意しないといけないのでは、「キー」フレームとは言えませんね。そこで、「最初と最後のフレーム」だけを用意し、その間を適当に補完してアニメーションさせてみましょう。
package fxsample; import java.lang.System; import javafx.application.*; import javafx.scene.geometry.Circle; import javafx.scene.paint.Color; import javafx.animation.*; var radiusNum = 50; var timeline = Timeline { var start = KeyFrame { time: 0s values: radiusNum => 0; } var end = KeyFrame { time: 5s values: radiusNum => 50 tween Interpolator.LINEAR } keyFrames : [start,end] } // Frame は先のサンプルと同じなので省略
ここでは、Timelineの中でstart
とend
という2つのKeyFrame
を作成し、それをkeyFramesアトリビュートに設定しています。たったこれだけでアニメーションができてしまうのです。
その最大の理由は、2つ目のキーフレームの設定です。valuesを設定するのに「radiusNum => 50 tween Interpolator.LINEAR
」という値が用意されていますね。ここでは「tween」というオペレータを使い、50まで滑らかに値を変化させながらradiusNum
が変更されるようにしています。このtweenは、その後にInterpolator
クラスのインスタンスを指定することで、どのように値を変化させていくかを指定することができます。LINEARは、直線的に値を変化させていくものです。
このように、いくつかキーとなるフレームを用意し、その間を補完しながらアニメーションをさせていくことで、非常に複雑な動きを実現できるようになります。またvaluesでは複数の値の設定も行うことができますから、同時にいくつものアトリビュートを変化させることも可能です。アニメーションに関しては、複雑になった分、はるかに強力になったといってよいでしょう。
まとめ
以上、GUIとグラフィックを利用したアプリケーションの基本的部分に絞って、0.7と1.0の違いを説明しました。ここにあげたのは、あくまで変更点の一部です。これですべてというわけではありません。が、それでも、ずいぶんと中身が変わっていることが実感できるはずです。
0.7から1.0への変更は、整理するなら「クラスの設計変更」に関するものと、「文法上の変更」に関するものに分けられるでしょう。例えば、今回のサンプルでは、SwingFrame
という新しいクラスを使ったり、アニメーションにTimeline
というクラスを使ったりしましたが、それらは「クラスの設計変更」です。この部分は、大きく変わっているとはいえ、要するに「クラスの内容が変わった」ということであり、調べれば理解できる部分です。アニメーション関係のように概念的にがらりと変わってしまったところもありますが、Javaの基本である「クラスに用意されている機能と働きを調べる」ということを地道に行っていけば理解できるようになるはずです。文法上の仕様変更については、これはもう「慣れ」しかありません。スクリプトを何度か書いていれば、自然と新しい書き方も身につくでしょう。
Sunのサイトでは、0.7から1.0への書き換え(正確には、インタープリタ版からコンパイラ版への書き換え)のためのポイントが整理され公開されています。スクリプト書き換えの際には、こちらを参考にするとよいでしょう。ただし、ここにまとめられているのは文法上の仕様変更に関するものだけであり、クラスライブラリの違いなどは触れていません。これらは別途学ぶ必要があります。
かなり大きな仕様変更ですが、実際にいくつかスクリプトの書き換え作業をしてみると、だいぶポイントがつかめてきます。大きく変わった部分は確かにありますが、そうしたいくつかの点を除けば、それ以外はアトリビュート名を変更したり、operationをfunctionに書き換える程度で移行できることが分かるはずです。秋には1.0の正式版も登場するはずですから、それまでに新しい書き方にぜひとも慣れておきたいところですね!