【ハウツー】

ついにリリース! NetBeans 6.5ではじめるJavaFX

7 JavaFXのアニメーション処理

    竹添直樹  [2008/12/17]

    アニメーション

    JavaFXはRIAプラットフォームなだけあり、アニメーションに関する機能も充実している。ただし、アニメーションに関してはタイムライン、キーフレームなど、通常のGUIアプリケーションとは異なる概念を理解する必要がある(Flashユーザにはお馴染みの概念だ)。

    例としてJavaFXのサンプルに含まれているClockアプリケーションのソースコードを見てみよう。

    Clockアプリケーション

    ClockアプリケーションではClockWorkというクラスを定義している。このクラスはJavaFXのCustomNodeクラスを継承しており、時計の描画とアニメーション処理をカプセル化したものだ。

    class ClockWork extends CustomNode {
    
        var seconds : Number;
        var minutes : Number;
        var hours : Number;
    
        init {
            var calendar : Calendar = Calendar.getInstance();
            seconds = calendar.get( Calendar.SECOND );
            minutes = calendar.get( Calendar.MINUTE );
            hours = calendar.get( Calendar.HOUR_OF_DAY );
        }
    
        public var timer : Timeline = Timeline { // ... (1)
            repeatCount : Timeline.INDEFINITE
            keyFrames :
                KeyFrame {
                    time : 1s
                    action : function() {
                        var calendar : Calendar = Calendar.getInstance();
                        seconds = calendar.get( Calendar.SECOND );
                        minutes = calendar.get( Calendar.MINUTE );
                        hours = calendar.get( Calendar.HOUR_OF_DAY );
                    }
                },
        };
    
        public override function create(): Node { // ... (2)
            return Group {
                content : [
                    Circle {
                        transforms : [ Translate { y : 100 }]
                        centerX : 100
                        radius : 80
                        fill : Color.GRAY
                    },
                    Line {
                        transforms : [ Rotate { angle : bind seconds * 6, pivotX : 100, pivotY : 100 }]
                        startX : 100
                        startY : 30
                        endX : 100
                        endY : 100
                        stroke : Color.WHITE
                    },
                    Line {
                        transforms : [ Rotate { angle : bind minutes * 6, pivotX : 100, pivotY : 100 }]
                        startX : 100
                        startY : 40
                        endX : 100
                        endY : 100
                        stroke : Color.WHITE
                        strokeWidth : 2
                    },
                    Line {
                        transforms : [ Rotate { angle : bind hours * 30, pivotX : 100, pivotY : 100 }]
                        startX : 100
                        startY : 50
                        endX : 100
                        endY : 100
                        stroke : Color.WHITE
                        strokeWidth : 4
                    }
                    ]
            };
        }
    }
    

    (1)で時計の針を動かすためのタイムラインを生成している。タイムラインは1秒ごとに実行されるキーフレームを含んでおり、キーフレームのアクションで時分秒を示すプロパティを更新している。

    また、(2)ではcreate()メソッドをオーバーライドし、時計を描画するためのシェイプを生成している。時計の針はLineシェイプを用いて描画されており、Rotateのangleプロパティが時分秒を示すプロパティにバインドされている。これによってキーフレームが時分秒を更新するとRotateのangleプロパティに値が反映され、時計の針が回転するというわけだ。

    最終的にClockWorksクラスを以下のように配置し、timerプロパティのplay()メソッドを呼び出すことでタイムラインの再生が開始し、Clockアプリケーションが動作する。

    var clockWork : ClockWork = ClockWork {};
    
    Stage {
        scene : Scene {
            content : clockWork
            }
    
        width : 200
        height : 232
        title: "Clock"
    }
    
    clockWork.timer.play();
    

    JavaFXのAPIを駆使することで複雑なアニメーションも実現することができる。とはいうものの、オーサリングツールなしで複雑なアニメーションを作成するのは非常に手間のかかる作業だ。今後はツールの充実も期待したいところだ。

    課題もメリットも多い新技術

    RIAプラットフォームはMicrosoftのSilverlightやAdobeのAIRなど、有力な競合プラットフォームがひしめいており、JavaFXがメインストリームとなるかどうかは不透明な状況だ。JavaFXはJavaプラットフォームを基盤としてはいるものの、新しくJavaFX Scriptを習得しなくてはならない、開発ツールがまだまだ充実しているとは言い難いなど、他の競合技術と比較すると不利な点もある。

    とはいえJavaFXでは既存の豊富なJava資産が活用できる、JavaVM上で動作することによる信頼性などJavaプラットフォームならではのメリットも多い。また、NetBeansのJavaFXプラグインはまだまだ機能面で改善の余地があるものの、開発ツールがオープンソースで提供されており、無償で開発環境を手に入れることができるという点はデベロッパにとっては大きなメリットと言えるのではないだろうか。

    JavaFXはまだ1.0がリリースされたばかり。今後の動向にも要注目だ。

    関連記事

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン