【文献】
竹迫良範,”第1章 今、ソフトウェア技術の世界で起きていること 高速化競争はCPUからJavaScriptエンジンへ”,SoftwareDesign,日本,(株)技術評論社,2010年 5月18日,第235号,p.17-20
【文献】
”Part2 ブラウザが変わる アプリ対応に進化したHTML5 何でもできるWebになる”,日経NETWORK,日本,日経BP社,2009年 8月28日,第113号,p.29-33
【文献】
森田創,”第2部<徹底解剖> 新型エンジン「V8」はなぜ速いのか”,日経エレクトロニクス,日本,日経BP社,2008年11月 3日,第990号,p.61-73
【文献】
野中文雄,”Macromedia Flash MX ActionScriptステップアップ講座”,MAC POWER,日本,株式会社アスキー,2003年11月 1日,第14巻, 第11号,p.160-161
(58)【調査した分野】(Int.Cl.,DB名)
インタプリタ型のスクリプト言語で記述されたスクリプトデータを実行することでGUI(グラフィカルユーザインターフェイス)をアニメーション表示するアニメーション描画装置であって、
前記スクリプトデータをインタプリタ方式で逐次解釈するインタプリタ部と、
ネイティブ言語で記述されたプログラムモジュールを実行することで、前記GUIをアニメーション表示するアニメーション制御部とを備え、
前記インタプリタ部は、所定のスクリプト変数を用いて定義されたアニメーション描画指示を解釈したとき、描画依頼を前記アニメーション制御部に出力し、
前記アニメーション制御部は、前記描画依頼を受け付けたとき、前記スクリプト変数を前記ネイティブ言語の形式のネイティブ変数に変換し、前記ネイティブ変数を逐次更新しながら前記GUIをアニメーション表示し、前記スクリプト変数に基づいて、アニメーションを開始してから完了するまでの1又は複数の描画時点における前記GUIの状態を示す変更予定情報を生成し、前記変更予定情報が示す描画時点に到達したとき、その描画時点における前記ネイティブ変数を前記インタプリタ部に出力すると共に、アニメーションが完了したとき完了通知を前記インタプリタ部に出力するアニメーション描画装置。
前記インタプリタ部は、アニメーションが開始されたとき、前記スクリプト変数が前記ネイティブ変数と同期していないことを示す非同期フラグを立て、前記アニメーション制御部から前記完了通知を受けたとき、前記非同期フラグを倒し、前記非同期フラグを立てている間に、ユーザが入力装置を操作することで所定の入力イベントが発生した場合、前記アニメーション制御部に前記ネイティブ変数を出力させる同期処理を実行する請求項1記載のアニメーション描画装置。
前記インタプリタ部は、アニメーションが開始されたとき、前記スクリプト変数が前記ネイティブ変数と同期していないことを示す非同期フラグを立て、前記アニメーション制御部から前記完了通知を受けたとき、前記非同期フラグを倒し、前記非同期フラグを立てている間に、ユーザが入力装置を操作することで所定の入力イベントが発生した場合、前記アニメーション制御部に前記ネイティブ変数を出力させる同期処理を実行する請求項4記載のアニメーション描画装置。
インタプリタ型のスクリプト言語で記述されたスクリプトデータを実行することでGUI(グラフィカルユーザインターフェイス)をアニメーション表示するアニメーション描画装置としてコンピュータを機能させるアニメーション描画プログラムであって、
前記スクリプトデータをインタプリタ方式で逐次解釈するインタプリタ部と、
ネイティブ言語で記述されたプログラムモジュールを実行することで、前記GUIをアニメーション表示するアニメーション制御部としてコンピュータを機能させ、
前記インタプリタ部は、所定のスクリプト変数を用いて定義されたアニメーション描画指示を解釈したとき、描画依頼を前記アニメーション制御部に出力し、
前記アニメーション制御部は、前記描画依頼を受け付けたとき、前記スクリプト変数を前記ネイティブ言語の形式のネイティブ変数に変換し、前記ネイティブ変数を逐次更新しながら前記GUIをアニメーション表示し、前記スクリプト変数に基づいて、アニメーションを開始してから完了するまでの1又は複数の描画時点における前記GUIの状態を示す変更予定情報を生成し、前記変更予定情報が示す描画時点に到達したとき、その描画時点における前記ネイティブ変数を前記インタプリタ部に出力すると共に、アニメーションが完了したとき完了通知を前記インタプリタ部に出力するアニメーション描画プログラム。
インタプリタ型のスクリプト言語で記述されたスクリプトデータを実行することでGUI(グラフィカルユーザインターフェイス)をアニメーション表示するアニメーション描画方法であって、
インタプリタ部が、前記スクリプトデータをインタプリタ方式で逐次解釈するインタプリタステップと、
アニメーション制御部が、ネイティブ言語で記述されたプログラムモジュールを実行することで、前記GUIをアニメーション表示するアニメーション制御ステップとを備え、
前記インタプリタステップは、所定のスクリプト変数を用いて定義されたアニメーション描画指示を解釈したとき、描画依頼を前記アニメーション制御部に出力し、
前記アニメーション制御ステップは、前記描画依頼を受け付けたとき、前記スクリプト変数を前記ネイティブ言語の形式のネイティブ変数に変換し、前記ネイティブ変数を逐次更新しながら前記GUIをアニメーション表示し、前記スクリプト変数に基づいて、アニメーションを開始してから完了するまでの1又は複数の描画時点における前記GUIの状態を示す変更予定情報を生成し、前記変更予定情報が示す描画時点に到達したとき、その描画時点における前記ネイティブ変数を前記インタプリタ部に出力すると共に、アニメーションが完了したとき完了通知を前記インタプリタ部に出力するアニメーション描画方法。
【発明を実施するための形態】
【0020】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0021】
(実施の形態1)
図1は、本発明の実施の形態1におけるアニメーション描画装置10の構成図である。
図1に示すアニメーション描画装置10は、インタプリタ部11、アニメーション制御部12、グラフィクス描画制御部13、グラフィクスプロセッサ部14、スクリプトデータ記憶部21、変更予定情報記憶部22,23、非同期フラグ記憶部24、スクリプト変数記憶部25、及びネイティブ変数記憶部26を備えている。
【0022】
インタプリタ部11は、スクリプトデータ記憶部21に記憶されたGUIをアニメーション表示するスクリプトデータをインタプリタ方式で逐次解釈する。本実施の形態では、インタプリタ部11は、所定のスクリプト変数を用いて定義されたアニメーション描画指示を解釈したとき、描画依頼をアニメーション制御部12に出力する。
【0023】
アニメーション制御部12は、ネイティブ言語で記述されたプログラムモジュールを実行することで、GUIをアニメーション表示する。本実施の形態では、アニメーション制御部12は、インタプリタ部11からの描画依頼を受け付けたとき、スクリプト変数をネイティブ言語の形式のネイティブ変数に変換し、ネイティブ変数を逐次更新しながらGUIをアニメーション表示する。
【0024】
このように、アニメーション制御部12は、スクリプト変数とは独立したネイティブ変数を逐次更新しながらGUIをアニメーション表示することができる。そのため、アニメーション制御部12は、アニメーションの途中でインタプリタ部11から変数を取り込む必要がなくなり、アニメーション制御部12が変数を取り込む際にインタプリタ部11で発生する検索処理が無くなる結果、アニメーションの実行速度を高めることができる。
【0025】
つまり、ネイティブ言語で記述されたプログラムモジュールが実行される際、スクリプト変数のコピーであるネイティブ変数がプログラムモジュールに代入される。ここで、GUIアニメーションにおいては、スクリプト変数として、GUIオブジェクトの属性情報が採用される。
【0026】
ネイティブ言語で記述されたプログラムモジュールはアニメーションの実行過程においてGUIオブジェクトの属性情報に頻繁にアクセスするが、アクセス先はネイティブ変数の属性情報であるため、アクセスに要する時間は、スクリプト言語の属性情報をアクセスする場合に比べて大幅に小さい。そのため、アニメーションの実行速度を高めることができる。なお、ネイティブ言語としては、機械語が採用される。また、インタプリタ部11が行う検索処理としては、処理負担が高い例えばハッシュ検索が採用される。
【0027】
また、アニメーション制御部12は、スクリプト変数に基づいて、アニメーションを開始してから完了するまでの1又は複数の描画時点におけるGUIの状態を示す変更予定情報を生成する。そして、アニメーション制御部12は、変更予定情報が示す描画時点に到達したとき、その描画時点におけるネイティブ変数をインタプリタ部11に出力する。
【0028】
ネイティブ変数が更新されてもスクリプト変数にはその更新が全く反映されないとすると、インタプリタ部11は、アニメーションの実行途中におけるネイティブ変数を把握できず、GUIオブジェクトの属性情報が把握できなくなってしまう。
【0029】
一方、アニメーション制御部12がネイティブ変数を更新する毎に、ネイティブ変数をインタプリタ部11に通知すれば、インタプリタ部11は、スクリプト変数がネイティブ変数と同期するため、現在のアニメーションの状態を把握することができる。しかしながら、これでは、アニメーション制御部12とインタプリタ部11との間でデータの授受が頻繁に行われ、アニメーション制御部12の処理負担が増大し、却って、アニメーションの実行速度を低下させる虞がある。
【0030】
そこで、アニメーション制御部12は、変更予定情報が示す描画時点に到達したときにだけ、ネイティブ変数をインタプリタ部11に出力している。これにより、アニメーション制御部12とインタプリタ部11との間でのデータの授受の回数が大幅に減少する結果、アニメーションの実行速度の低下を防止することができる。
【0031】
また、アニメーション制御部12は、アニメーションが完了したとき完了通知をインタプリタ部11に出力する。これにより、インタプリタ部11は、アニメーションが完了したことを認識することができる。
【0032】
また、アニメーション制御部12は、変更予定情報を変更予定情報記憶部23に記憶させると共に、変更予定情報をインタプリタ部11に出力する。このとき、インタプリタ部11は、出力された変更予定情報を変更予定情報記憶部22に記憶させる。
【0033】
このように、変更予定情報記憶部22,23の両方に変更予定情報を記憶させることで、インタプリタ部11及びアニメーション制御部12間で授受されるデータ量を減少させることができ、アニメーション制御部12及びインタプリタ部11の処理負担の軽減を図ることができる。
【0034】
ここで、変更予定情報記憶部22は、インタプリタ部11がアクセス可能な記憶領域又は記憶装置により構成され、変更予定情報記憶部23は、アニメーション制御部12がアクセス可能な記憶領域又は記憶装置により構成されている。
【0035】
また、アニメーション制御部12は、例えば1フレームの描画時点に到達する毎に、ネイティブ変数を更新し、更新したネイティブ変数にしたがって次の1フレームを描画させるための描画指示をグラフィクス描画制御部13に出力し、グラフィクス描画制御部13に1フレームのGUIの描画処理を行わせる。また、アニメーション制御部12は、1フレームの描画処理が完了する毎にグラフィクス描画制御部13から完了通知を受ける。
【0036】
グラフィクス描画制御部13は、アニメーション制御部12から描画指示が通知されると、その描画指示を、グラフィクスプロセッサ部14が実行可能な低レベルの描画コマンドに分解し、描画コマンドをグラフィクスプロセッサ部14に出力する。ここで、グラフィクス描画制御部13は、一般的には、グラフィクス・ライブラリ又はデバイス・ドライバ等と呼ばれている。
【0037】
グラフィクスプロセッサ部14は、グラフィクス描画制御部13から出力された描画コマンドを実行し、内蔵するフレームバッファにフレームを描画することによりグラフィクスを生成する。
【0038】
上記のインタプリタ部11は、アニメーションが開始されたとき、スクリプト変数がネイティブ変数と同期していないことを示す非同期フラグを立て、アニメーション制御部12から完了通知を受けたとき、非同期フラグを倒す。そして、インタプリタ部11は、非同期フラグを立てている間に、ユーザが入力装置40を操作することで所定の入力イベントが発生した場合、アニメーション制御部12にネイティブ変数を出力させる同期処理を実行する。
【0039】
例えば、GUIオブジェクトが移動するアニメーションの実行途中で、ユーザがマウスをクリックする入力イベントが発生した場合を考える。アニメーションの実行途中では、スクリプト変数とネイティブ変数とが同期していないため、インタプリタ部11は現在のGUIオブジェクトの位置を知ることができず、クリック時においてマウスポインタがGUIオブジェクトと重なっていたのか否かを判定することができなくなる。
【0040】
そこで、入力イベントが発生した場合、インタプリタ部11は、アニメーション制御部12に現在のネイティブ変数を強制的に出力させ、スクリプト変数とネイティブ変数とを同期させている。これにより、インタプリタ部11は、現在のGUIオブジェクトの位置を認識することができ、入力イベントが発生したときにマウスポインタとGUIオブジェクトとが重なっていたか否かを判定することができる。そして、マウスポインタとGUIオブジェクトとが重なっていると判定した場合、インタプリタ部11は、スクリプトデータに従って、そのGUIオブジェクトがクリックされたときに発生する処理を実行すればよい。
【0041】
なお、インタプリタ部11は、アニメーション制御部12から出力されたネイティブ変数をスクリプト変数に変換し、現在、スクリプト変数記憶部25で記憶されているスクリプト変数を変換したスクリプト変数で更新すればよい。また、インタプリタ部11は、非同期フラグを立てるときは、非同期フラグ記憶部24に例えば「1」のデータを格納し、非同期フラグを倒すときは、非同期フラグ記憶部24に例えば「0」のデータを格納すればよい。
【0042】
スクリプトデータ記憶部21は、GUIをアニメーション表示するためのスクリプトデータを記憶している。ここで、スクリプトデータは、インタプリタ型のスクリプト言語で記述されたデータであり、例えば、JavaScript(登録商標)等で記述されている。このスクリプトデータには、アニメーション対象となるGUIを構成するGUIオブジェクトの属性情報を定義するためのデータや、GUIをアニメーション表示するためのアニメーション描画指示等が記述されている。
【0043】
変更予定情報記憶部22は、アニメーション制御部12から出力され、インタプリタ部11により受け付けられた変更予定情報を記憶している。ここで、変更予定情報記憶部22が記憶する変更予定情報は、例えばインタプリタ部11によりスクリプト変数に変換された変更予定情報である。
【0044】
変更予定情報記憶部23は、アニメーション制御部12により生成された変更予定情報を記憶している。ここで、変更予定情報記憶部23に記憶された変更予定情報は、ネイティブ変数の変更予定情報である。
【0045】
図6は、本発明の実施1の形態におけるスクリプトデータに記述された属性情報をテーブル形式で示した属性情報テーブルTB1を示した図である。
図6に示すように、属性情報テーブルTB1は、GUIオブジェクト識別子、X座標、Y座標、幅、及び高さの欄を備え、各GUIの属性情報は、これらのデータが含まれていることが分かる。なお、
図6に示す属性情報を構成するデータは、座標が変化するアニメーションを実現する際に必要となるデータを例示的に示したにすぎず、
図6に示すデータに限定されない。例えば、色や透明度が変化するアニメーションを採用する場合は、色及び透明度を属性情報に含ませればよい。
【0046】
GUIオブジェクト識別子は、各GUIオブジェクトを識別するために各GUIオブジェクトに一意的に割り付けられた文字列により構成されている。X座標及びY座標は、GUIオブジェクトの表示位置を示す。
図6の例では、表示装置30の画面の例えば左上の頂点が原点とされ、垂直方向の下方に向けてY座標が定義され、水平方向の右側に向けてX座標が定義されている。よって、X座標及びY座標は、GUIオブジェクトの画面上での各画素の位置を示す。
【0047】
幅はGUIオブジェクトの水平方向の大きさを示している。高さはGUIオブジェクトの垂直方向の大きさを示している。なお、以降の説明においては、1行目の欄R1に記述されたGUIオブジェクト識別子が「ID1」のGUIオブジェクトを、移動表示させるアニメーションを例に挙げて説明する。
【0048】
図9は、本発明の実施の形態におけるスクリプトデータにしたがって、表示装置30の画面301にアニメーション表示されるGUIを示した画面図である。このGUIは、GUIオブジェクトOB1を右斜め下側に向けて移動させるものである。GUIオブジェクトOB1は、
図6に示すGUIオブジェクト識別子がID1のGUIオブジェクトである。
【0049】
アニメーション開始時において、GUIオブジェクトOB1は位置PS0に位置している。以後、フレームが更新される毎にGUIオブジェクトOB1は、位置PS1,PS2,PS3,PS4,PS5というように、右斜め下に向けて移動していき、最終的に位置PS6まで移動する。マウスポインタPTは、ユーザにより入力装置40が操作されると、それに応じて画面301上を移動する。
【0050】
なお、
図9において、GUIオブジェクトOB1が位置PS3に位置する3フレーム目は、
図8に示す変更予定情報のタイムスタンプで示された描画時点であり、アニメーション制御部12はインタプリタ部11にオブジェクトOB1の座標を含むネイティブ変数を出力する。ここで、GUIオブジェクトOB1の座標としては、例えば、GUIオブジェクトOB1の左上の頂点の座標が採用されている。但し、これは一例であり、右上、右下、左下、中心等の座標を採用してもよい。
【0051】
図7は、アニメーション開始時にインタプリタ部11がアニメーション制御部12に描画依頼として出力するスクリプト変数を構成する属性情報Z1の一例を示した図である。この属性情報Z1には、GUIオブジェクト識別子、開始点、完了点、及び変化量を格納する欄が含まれている。オブジェクト識別子は、アニメーション対象となるGUIオブジェクトの識別子である。
図7の例では、GUIオブジェクト識別子の欄にID1が格納されており、この属性情報Z1には
図9に示すGUIオブジェクトOB1の属性情報が含まれていることが分かる。なお、アニメーション対象となるGUIオブジェクトが複数存在する場合、属性情報Z1には複数のGUIオブジェクトに関する属性情報が含まれることになる。なお、属性情報Z1はスクリプトデータに予め記述されている。
【0052】
開始点は、アニメーションの開始時におけるGUIオブジェクトの位置を示している。
図7の例では、開始点としてX座標=100、Y座標=100と定義されているため、
図9に示すように、GUIオブジェクトOB1は、アニメーションの開始時に、X座標=100、Y座標=100の位置PS0に表示される。
【0053】
完了点は、アニメーションの完了時におけるGUIオブジェクトの位置を示している。
図7の例では、X座標=130、Y座標=160と定義されているため、GUIオブジェクトOB1はアニメーションの終了時にX座標=130、Y座標=160の位置PS6に表示される。
【0054】
変化量は、アニメーションの処理が1フレーム進行する毎にGUIオブジェクトの位置をどれだけ変化させるかを示す値である。
図7の例では、変化量として、X成分=5、Y成分=10が定義されているため、GUIオブジェクトOB1は1フレーム進行する毎にX座標が5、Y座標が10ずつ増加される。なお、変化量の単位はピクセルである。
【0055】
図8は、本発明の実施の形態1における変更予定情報IF1の一例を示した図である。変更予定情報IF1は、タイムスタンプ、X座標、及びY座標を格納する欄を備えている。
図8に示す変更予定情報IF1の例では、3個の描画時点におけるGUIオブジェクトOB1の位置が含まれている。
【0056】
タイムスタンプは、アニメーション制御部12がインタプリタ部11にネイティブ変数を通知する描画時点を示しており、本実施の形態では、アニメーション開始時に表示されるフレームを0フレーム目としたとき、何枚目のフレームであるかを示す値が採用されている。
図8の例では、タイムスタンプとして0、3、6が定義されているため、アニメーション制御部12は、アニメーション開始時から0フレーム目、3フレーム目、6フレーム目におけるGUIオブジェクトOB1の位置をインタプリタ部11に出力する。なお、0フレーム目はアニメーション開始時点を示し、6フレーム目はアニメーションの完了時点を示しているため、アニメーション制御部12は、GUIオブジェクトOB1の位置を出力しなくともよい。
【0057】
ここで、変更予定情報IF1は、アニメーション制御部12により下記のようにして生成される。まず、アニメーションの開始時点において、アニメーション制御部12は、インタプリタ部11から、
図6に示す欄R1の属性情報及び
図7に示す属性情報Z1が含まれるスクリプト変数を受け付ける。
【0058】
次に、アニメーション制御部12は、予め定められたタイムスタンプにおけるGUIオブジェクトOB1の位置を、
図7に示す属性情報Z1を参照して生成する。
図8の例では、0、3、6が予め定められたタイムスタンプとして定義されているため、アニメーション制御部12は、
図7に示す開始点及び変化量から3フレーム目及び6フレーム目のGUIオブジェクトOB1の位置を求めることで、
図8に示す変更予定情報IF1を生成する。そして、アニメーション制御部12は、生成した変更予定情報IF1をインタプリタ部11に通知すると共に、変更予定情報記憶部23に記憶させる。また、インタプリタ部11は、通知された変更予定情報IF1を変更予定情報記憶部22に記憶させる。
【0059】
なお、
図8では、タイムスタンプが3個の場合を例に挙げて説明したが、これに限定されず、2個又は4個以上の所定の値を予め定められたタイムスタンプとして採用してもよい。この場合、アニメーション制御部12は、
図7に示す開始点及び変化量を用いて各タイムスタンプにおけるGUIオブジェクトOB1の位置を求めればよい。
【0060】
図1に戻り、非同期フラグ記憶部24は、インタプリタ部11により設定される非同期フラグを記憶する。スクリプト変数記憶部25は、インタプリタ部11が管理するスクリプト変数であって、変更予定情報以外のスクリプト変数を記憶する。ネイティブ変数記憶部26は、アニメーション制御部12により逐次更新されるネイティブ変数であって、変更予定情報以外のネイティブ変数を記憶する。表示装置30は、プラズマディスプレイや液晶ディスプレイにより構成され、アニメーション描画装置10により描画されるアニメーションを表示する。
【0061】
図2は、本発明の実施の形態1におけるアニメーション描画装置10の構成要素間におけるデータの授受を示したタイミングチャートである。
【0062】
まず、インタプリタ部11は、GUIをアニメーション表示するための入力イベントが発生すると、
図6の欄R1に記載された属性情報及び
図7に示す属性情報Z1をスクリプト変数に含ませ、このスクリプト変数を描画依頼としてアニメーション制御部12に出力する(タイミングTM1)。
【0063】
次に、アニメーション制御部12は、描画依頼を受け付けると、変更予定情報IF1を生成し、インタプリタ部11に出力する(タイミングTM2)。次に、アニメーション制御部12は、1フレームの描画タイミングが到達する毎に描画指示をグラフィクス描画制御部13に出力する(タイミングTM3〜TM5)。
【0064】
なお、グラフィクス描画制御部13は、描画指示を受け付ける毎にグラフィクスプロセッサ部14が実行可能な低レベルの描画コマンドを生成し、グラフィクスプロセッサ部14に1フレームのGUIを描画させる。そして、グラフィクス描画制御部13は、1フレームの描画が完了すると、完了通知をアニメーション制御部12に出力する。
【0065】
タイミングTM5は、変更予定情報IF1のタイムスタンプが示す描画時点に該当する。そのため、アニメーション制御部12は、現在のネイティブ変数を変更通知としてインタプリタ部11に出力する。
【0066】
上記の処理が繰り返され、GUIがアニメーション表示される。そして、最終のフレームの描画指示に対する完了通知がグラフィクス描画制御部13から出力されると、アニメーション制御部12は、アニメーションが完了したことを示す完了通知をインタプリタ部11に出力する(タイミングTM6)。
【0067】
図3は、本発明の実施の形態1におけるアニメーション描画装置10の処理を示すフローチャートである。ステップS1において、インタプリタ部11は、スクリプトデータを逐次解釈していき、アニメーション描画指示を解釈すると、描画依頼をアニメーション制御部12に出力する。ここで、インタプリタ部11は、
図6の欄R1に示す属性情報及び
図7に示す属性情報Z1を含むスクリプト変数を描画依頼として出力する。また、インタプリタ部11は、アニメーション制御部12に出力したスクリプト変数をスクリプト変数記憶部25に記憶させる。
【0068】
次に、アニメーション制御部12は、スクリプト変数から
図8に示す変更予定情報IF1を生成し(ステップS2)、変更予定情報記憶部23に記憶させると共に、インタプリタ部11に出力する。
【0069】
次に、インタプリタ部11は、アニメーション制御部12から出力された変更予定情報IF1をスクリプト変数に変換して、変更予定情報記憶部22に記憶させ、非同期フラグを立てる(ステップS3)。
【0070】
次に、アニメーション制御部12は、インタプリタ部11から描画依頼として出力されたスクリプト変数をネイティブ変数に変換することで、ネイティブ変数を初期化する(ステップS4)。なお、ネイティブ変数は、概念的には
図6の欄R1に示す属性情報及び
図7に示す属性情報Z1と同一内容である。
【0071】
次に、アニメーション制御部12は、0フレーム目のGUIを描画するための描画指示をグラフィクス描画制御部13に出力する(ステップS5)。これにより、グラフィクス描画制御部13は、グラフィクスプロセッサ部14に描画コマンドを出力し、表示装置30には0フレーム目のGUIが表示される。
【0072】
つまり、アニメーション制御部12は、
図7に示す属性情報Z1の開始点がX座標=100、Y座標=100であるため、
図9に示すように、位置PS0にGUIオブジェクトOB1が描画されるようにグラフィクス描画制御部13に描画指示を出力する。
【0073】
次に、アニメーション制御部12は、1フレームの描画時点に到達すると、次の1フレームを描画するためにネイティブ変数を更新し、更新したネイティブ変数が反映された描画指示をグラフィクス描画制御部13に出力し、所定時間スリープする(ステップS6)。ここで、所定時間としては、例えば、アニメーション制御部12が描画指示を出力してからグラフィクス描画制御部13が1フレームの描画の完了を告げる完了通知を出力するまでの期間を採用することができる。つまり、アニメーション制御部12は、グラフィクス描画制御部13から出力される完了通知によってスリープが解除される。
【0074】
また、アニメーション制御部12は、ステップS4でネイティブ変数に変換したネイティブ変数の開始点のX座標=100、Y座標=100に変化量のX成分=5、Y成分=10をそれぞれ加算して、1フレーム目のGUIオブジェクトOB1の位置(X座標=105、Y座標=110)を算出し、算出した位置をネイティブ変数に含ませ、ネイティブ変数を更新する。この場合、アニメーション制御部12は、例えば、
図7に示す属性情報Z1において、GUIオブジェクトOB1の現在位置を格納する欄を追加したものをネイティブ変数とすればよい。
【0075】
そして、アニメーション制御部12は、2フレーム目以降において、1フレームが進行する毎に、GUIオブジェクトOB1の現在の位置のX座標及びY座標に、変化量のX成分=5及びY成分=10をそれぞれ加算して、ネイティブ変数を更新する。
【0076】
次に、アニメーション制御部12は、アニメーションが完了したか否かを判定する(ステップS7)。ここで、アニメーション制御部12は、ネイティブ変数の現在位置が
図7に示す完了点に一致したときアニメーションが完了したと判定すればよい。
【0077】
次に、アニメーション制御部12は、アニメーションが完了していないと判定した場合(ステップS7でNO)、現フレームが変更予定情報IF1のタイムスタンプが示すフレームに該当するか否かを判定する(ステップS8)。つまり、アニメーション制御部12は、現フレームが3フレーム目である場合、ステップS8でYESと判定し、現在のネイティブ変数を変更通知としてインタプリタ部11に出力し(ステップS9)、処理をステップS6に戻す。これにより、スクリプト変数とネイティブ変数との同期が図られ、インタプリタ部11は、GUIオブジェクトOB1の現在位置を認識することが可能となる。
【0078】
なお、変更通知を受け付けたインタプリタ部11は、ネイティブ変数をスクリプト変数に変換し、
図7に示す属性情報Z1に現在位置の欄を追加し、この欄にGUIオブジェクトOB1の現在位置を書き込み、スクリプト変数を更新する。
【0079】
一方、アニメーション制御部12は、現フレームが変更予定情報IF1のタイムスタンプが示すフレームに該当していない場合、つまり、現フレームが3フレーム目に該当しない場合、ステップS8でNOと判定し、処理をステップS6に戻す。
【0080】
ステップS7において、アニメーション制御部12はアニメーションが完了したと判定した場合(ステップS7でYES)、完了通知をインタプリタ部11に出力する(ステップS10)。次に、インタプリタ部11は、非同期フラグを倒し(ステップS11)、処理を終了する。
【0081】
以上の処理により、アニメーション制御部12は、1フレーム毎にネイティブ変数をインタプリタ部11に出力するのではなく、タイムスタンプが示すフレームにおいてネイティブ変数をインタプリタ部11に出力するため、処理負担が軽減し、GUIのアニメーションの実行速度の低下を防止することができる。
【0082】
図4は、本発明の実施の形態1の変形例におけるアニメーション描画装置10の構成要素間のデータの授受を示したタイミングチャートである。
図2においては、アニメーション制御部12は、タイムスタンプに示す描画時点において、ネイティブ変数を変更通知としてインタプリタ部11に出力していた。
【0083】
一方、
図4に示す変形例では、アニメーション制御部12は、インタプリタ部11から同期指示を受け付けたとき、ネイティブ変数をインタプリタ部11に出力している。
【0084】
図4に示すタイミングTM1〜TM4、TM6は
図2と同一であるため、説明を省く。タイミングTM5において、インタプリタ部11は、アニメーション制御部12に同期指示を出力している。これは、GUIオブジェクトOB1がアニメーション表示されている途中で、ユーザがマウスをクリックする入力イベントが発生したためである。
【0085】
同期指示を受けたアニメーション制御部12は、GUIオブジェクトOB1の現在位置を含むネイティブ変数を現在情報としてインタプリタ部11に出力する。
【0086】
インタプリタ部11は、現在情報を受け付けると、ネイティブ変数をスクリプト変数に変換し、スクリプト変数を更新する。これにより、スクリプト変数とネイティブ変数とが同じ値となり、両変数が同期する。
【0087】
図5は、本発明の実施の形態1の変形例におけるアニメーション描画装置10の処理を示すフローチャートである。
図5のフローチャートは
図4のタイミングTM5において同期指示が出力されたときに、アニメーション描画装置10により実行されるフローチャートである。
【0088】
まず、インタプリタ部11は、ユーザによりマウスがクリックされ、入力イベントが発生すると(ステップS21でYES)、非同期フラグが立っているか否かを判定する(ステップS22)。一方、入力イベントが発生していない場合(ステップS21でNO)、処理がステップS21に戻される。
【0089】
インタプリタ部11は、非同期フラグが立っている場合(ステップS22でYES)、アニメーション制御部12に同期指示を出力する(ステップS23)。ここで、非同期フラグが立っている場合、アニメーションが実行途中であり、スクリプト変数とネイティブ変数とが同期していない。そのため、現在のスクリプト変数は、GUIオブジェクトOB1の現在位置を示していない。そこで、インタプリタ部11は、スクリプト変数とネイティブ変数とを同期させるために同期指示をアニメーション制御部12に出力する。
【0090】
次に、アニメーション制御部12は、現在のネイティブ変数を現在情報としてインタプリタ部11に出力する(ステップS24)。次に、インタプリタ部11は、ネイティブ変数をスクリプト変数に変換し、スクリプト変数を更新し、スクリプト変数とネイティブ変数とを同期させる(ステップS25)。
【0091】
これにより、インタプリタ部11は、GUIオブジェクトOB1の現在位置を認識することができ、マウスポインタPTとユーザがGUIオブジェクトOB1とが重なっているか否かを判定することができる。
【0092】
ここで、インタプリタ部11は、GUIオブジェクトOB1とマウスポインタPTとが重なっていると判定した場合、ユーザがGUIオブジェクトOB1をクリックしたと判定し、GUIオブジェクトOB1がクリックされた際に実行することが予め定められていた処理プログラムを実行すればよい。一方、GUIオブジェクトOB1とマウスポインタPTとが重なっていないと判定した場合、GUIオブジェクトOB1のクリック時に実行させる処理プログラムを実行しなければよい。
【0093】
なお、インタプリタ部11は、GUIオブジェクトOB1の現在の位置から、
図6に示すGUIオブジェクトOB1の幅及び高さを特定し、特定した幅及び高さからGUIオブジェクトOB1が描画された領域を設定する。そして、この領域内にマウスポインタPTが位置すれば、インタプリタ部11は、マウスポインタPTとGUIオブジェクトOB1とが重なっていると判定すればよい。
【0094】
一方、ステップS22において、非同期フラグが立っていない場合(ステップS22でNO)、スクリプト変数とネイティブ変数とは同期しているため、インタプリタ部11は、スクリプト変数を参照し(ステップS26)、現在のGUIオブジェクトOB1の位置を認識する。
【0095】
上記説明では、変更予定情報IF1として、
図8に示すように、タイムスタンプを採用したが、これに代えてアニメーションが開始されてからの時刻を採用してもよい。また、変更予定情報IF1としてGUIオブジェクトOB1の位置を属性情報として採用したが、これに限定されず、GUIオブジェクトOB1の位置に加えて、又はGUIオブジェクトOB1の位置に代えて、GUIオブジェクトOB1のサイズ、拡大縮小率、回転率(ロール角、ピッチ角、ヨー角)、色、透過度、及び画像の少なくともいずれか1つを含めても良い。
【0096】
この場合、
図8に示す変更予定情報IF1において、サイズ、拡大縮小率、回転率(ロール角、ピッチ角、ヨー角)、色、透過度、及び画像の欄を設け、タイムスタンプ毎にこれらの情報を規定すればよい。
【0097】
また、上記説明では、アニメーション制御部12が変更予定情報IF1を生成したが、インタプリタ部11が変更予定情報IF1を生成してもよい。この場合、インタプリタ部11は、アニメーション制御部12と同様、アニメーションを開始するときに、
図6の欄R1に示す属性情報及び
図7に示す属性情報Z1等から
図8に示す変更予定情報IF1を生成すればよい。
【0098】
そして、インタプリタ部11は、生成した変更予定情報IF1を変更予定情報記憶部22に記憶させると共に、アニメーション制御部12に出力すればよい。なお、インタプリタ部11から変更予定情報IF1を受け付けたアニメーション制御部12は、変更予定情報IF1をネイティブ変数に変換して、変更予定情報記憶部23に記憶させればよい。
【0099】
これにより、インタプリタ部11及びアニメーション制御部12の双方が変更予定情報IF1を参照することが可能となり、インタプリタ部11及びアニメーション制御部12間で送受されるデータ量を少なくすることができる。
【0100】
なお、GUIオブジェクトの属性情報としてフォーカスの属性が知られている。このフォーカスの属性は、GUIオブジェクトが現在、操作対象となっているか否かを示す属性情報である。フォーカスの属性としては、「当っている」又は「外れている」の2通りの状態が存在する。例えば、GUIオブジェクトとマウスポインタとが重なっている場合、フォーカスの属性は「当っている」となる。あるGUIオブジェクトのフォーカスの属性が「当っている」の状態を示す場合において、アニメーションが開始されて非同期フラグが立てられた場合、そのGUIオブジェクトのフォーカスの属性を「外れている」に変更しても良い。この構成は、例えば、アニメーションが開始されてGUIオブジェクトが移動を開始し、マウスポインタとGUIオブジェクトとが重なっている状態から重なっていない状態になることが想定されるGUIのアニメーションに対して有効となる。
【0101】
また、アニメーションが完了して非同期フラグが倒された場合、インタプリタ部11は、GUIオブジェクトの完了点の座標と、現在のマウスポインタの位置とからGUIオブジェクトとマウスポインタとが重なっているか否かを判定し、その判定結果でフォーカスの属性を更新し、フォーカスの属性を最新状態に更新しても良い。
【0102】
以上説明した変形例によれば、インタプリタ部11は、アニメーションの実行途中で適宜、スクリプト変数をネイティブ変数に同期させることが可能であるため、アニメーションの実行途中であっても、マウスポインタPTとGUIオブジェクトOB1とが重なっているか否かを判定することができる。一方、インタプリタ部11は、スクリプト変数をネイティブ変数に同期させる必要がない場合は同期処理を行わず、アニメーション制御部12は、逐次ネイティブ変数を更新してアニメーションの描画処理を実行する。そのため、アニメーション制御部12は、インタプリタ部11からスクリプト変数を取り込むことなくアニメーションの描画処理を実行することができる。その結果、アニメーションの実行速度の低下を防止することができる。
【0103】
なお、実施の形態1によるアニメーション描画装置10と変形例によるアニメーション描画装置10とを組み合わせても良い。つまり、アニメーション制御部12がタイムスタンプにしたがってネイティブ変数を出力し、かつ、インタプリタ部11が必要に応じてスクリプト変数をネイティブ変数に同期させてもよい。
【0104】
(実施の形態2)
実施の形態2によるアニメーション描画装置10は、アニメーションの実行中にマウスポインタPTとGUIオブジェクトとの重なり状態が変化した場合、アニメーション制御部12がインタプリタ部11にネイティブ変数を出力することを特徴としている。
図10は、本発明の実施の形態2によるアニメーション描画装置10の構成図を示している。なお、本実施の形態において実施の形態1と同一のものは同一の符号を用いて説明を省略する。また、
図6、
図7、
図9は本実施の形態の説明においても参照する。
【0105】
本実施の形態において、インタプリタ部11は、アニメーション描画指示を解釈したとき、画面301上に表示されたマウスポインタPTの位置をアニメーション制御部12に出力する。
【0106】
アニメーション制御部12は、インタプリタ部11から出力されたマウスポインタPTの位置をネイティブ変数に変換し、ポインタ情報記憶部28に記憶させる。
【0107】
そして、アニメーション制御部12は、アニメーションの実行中にマウスポインタPTとGUIを構成するGUIオブジェクトOB1との重なり状態が変化したとき、そのときのネイティブ変数をインタプリタ部11に出力する。
【0108】
ここで、アニメーション制御部12は、ネイティブ変数を更新する毎に、ポインタ情報記憶部28に記憶されたマウスポインタPTの位置を参照し、両者を比較することで、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したか否かを判定すればよい。
【0109】
具体的には、アニメーション制御部12は、前回の判定時にGUIオブジェクトOB1とマウスポインタPTとが重なっていた場合において、GUIオブジェクトOB1とマウスポインタPTとが重ならなくなった場合、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したと判定すればよい。
【0110】
一方、アニメーション制御部12は、前回の判定時にGUIオブジェクトOB1とマウスポインタPTとが重なっていなかった場合において、GUIオブジェクトOB1とマウスポインタPTとが重なった場合、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したと判定すればよい。
【0111】
より具体的には、アニメーション制御部12は、現在のネイティブ変数からGUIオブジェクトOB1の位置を特定する。そして、アニメーション制御部12は、特定した位置をGUIオブジェクトOB1の左上の頂点とし、
図6に示す欄R1に格納されたGUIオブジェクトOB1の幅及び高さによって規定される矩形領域を設定する。そして、アニメーション制御部12は、ポインタ情報記憶部28に記憶されたマウスポインタPTの位置がこの矩形領域の領域内に位置する場合、GUIオブジェクトOB1とマウスポインタPTとの重なっていると判定し、この矩形領域内にマウスポインタPTが位置していない場合、マウスポインタPTとGUIオブジェクトOB1とは重なっていないと判定すればよい。
【0112】
そして、アニメーション制御部12は、1フレーム前における重なり状態の判定結果と、現フレームにおける重なり状態の判定結果とが相違した場合、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したと判定すればよい。
【0113】
ポインタ情報記憶部27は、インタプリタ部11が管理するマウスポインタPTの位置を記憶する。ポインタ情報記憶部28は、アニメーション制御部12が管理するマウスポインタPTの位置を記憶し、このマウスポインタPTの位置は、インタプリタ部11が管理するマウスポインタPTの位置のコピーである。
【0114】
図9に示すように、マウスポインタPTは、ユーザが入力装置40を用いた操作を行うことによって移動される。ここで、インタプリタ部11は、入力装置40から出力される信号に基づいてマウスポインタPTの画面301上での位置を検出すればよい。
【0115】
図9の例では、入力イベントの発生時におけるマウスポインタPTは、左上の座標が(107,113)に位置している。そのため、インタプリタ部11は、(107,113)をマウスポインタPTの位置として検出する。以下、マウスポインタPTの左上の座標をマウスポインタPTの位置として説明する。
【0116】
図11は、本発明の実施の形態2におけるアニメーション描画装置10の構成要素間のデータの授受を示すタイミングチャートである。
【0117】
まず、タイミングTM1において、インタプリタ部11は、スクリプトデータに記述されたアニメーション描画指示を解釈すると、このときのマウスポインタPTの位置を登録するためのポインタ情報登録指示をアニメーション制御部12に出力する。これにより、アニメーション制御部12は、入力イベントが発生したときのマウスポインタPTの位置をポインタ情報記憶部28に記憶させる。
【0118】
次に、インタプリタ部11は、
図2と同様、描画依頼をアニメーション制御部12に出力する(タイミングTM2)。つまり、
図6の欄R1に示す属性情報及び
図7に示す属性情報Z1を含むスクリプト変数が描画依頼として出力される。このとき、アニメーション制御部12は、GUIオブジェクトOB1とマウスポインタPTとが重なっているか否かを判定する。
【0119】
次に、
図2と同様、アニメーション制御部12はグラフィクス描画制御部13との間で描画指示及び完了通知の送受を繰り返し、ネイティブ変数を逐次更新しながらGUIをアニメーション表示する(タイミングTM3,TM4)。ここで、アニメーション制御部12は、ネイティブ変数を更新する毎に、ポインタ情報記憶部28に記憶されたマウスポインタPTの位置とネイティブ変数が示すGUIオブジェクトOB1の位置とを比較し、マウスポインタPTとGUIオブジェクトOB1との重なり状態が変化したか否かを監視する。
【0120】
次に、タイミングTM5において、アニメーション制御部12は、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したと判定した場合、変更通知をインタプリタ部11に出力する。
【0121】
ここで、アニメーション制御部12は、
図2と同様、ネイティブ変数を変更通知としてインタプリタ部11に出力する。これにより、インタプリタ部11は、GUIオブジェクトOB1の現在の位置を認識することができる。
【0122】
次に、アニメーション制御部12は、
図2と同様、アニメーションが完了すると、完了通知をインタプリタ部11に出力する(タイミングTM6)。
【0123】
図12は、本発明の実施の形態2におけるアニメーション描画装置10の処理を示すフローチャートである。インタプリタ部11は、スクリプトデータを逐次解釈していき、アニメーション描画指示を解釈すると、現在のマウスポインタPTの位置を登録するためのポインタ情報登録指示及び描画依頼をアニメーション制御部12に出力する(ステップS31)。これにより、アニメーション制御部12は、アニメーション開始時のマウスポインタPTの位置を認識することができる。なお、マウスポインタPTの位置としては、マウスポインタPTの座標を採用するが、これに限定されず、マウスポインタPTの領域を採用しても良い。マウスポインタPTの領域としては、
図9に示すマウスポインタPTの輪郭を特定することができる情報を採用すればよい。
【0124】
次に、アニメーション制御部12は、インタプリタ部11から出力されたポインタ登録情報が示すマウスポインタPTの位置をポインタ情報記憶部28に記憶させる(ステップS32)。
【0125】
ステップS33〜S36,S39は
図3に示すステップS4〜S7,S10と同一であるため、説明を省略する。
【0126】
ステップS37において、アニメーション制御部12は、ネイティブ変数と、ポインタ情報記憶部28に記憶されたマウスポインタPTの位置とを比較して、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したか判定する。そして、アニメーション制御部12は、マウスポインタPTとGUIオブジェクトOB1との重なり状態が変化したと判定した場合(ステップS37でYES)、ステップS38に処理を進め、重なり状態が変化していない場合(ステップS37でNO)、処理をステップS35に戻す。
【0127】
図9の例では、マウスポインタPTの位置が変化していないとすると、アニメーションが開始されてから、2フレーム目の描画時点でGUIオブジェクトOB1は位置PS2に位置しており、重なり状態が「重なっている」から「重なっていない」に変化する。
【0128】
具体的には、
図9において、GUIオブジェクトOB1が位置PS2に位置するとき、GUIオブジェクトOB1の左上の頂点の座標は(110,120)であり、マウスポインタPTの位置は(107,113)であるため、GUIオブジェクトOB1とマウスポインタPTとは重なっていない。したがって、アニメーション制御部12は、GUIオブジェクトOB1とマウスポインタPTとの重なり状態が変化したと判定し、位置PS2を含むネイティブ変数を変更通知としてインタプリタ部11に出力する(ステップS38)。
【0129】
これにより、インタプリタ部11は、アニメーションの実行途中において、入力イベントが発生して、GUIオブジェクトOB1の現在の位置を認識する必要が生じた場合、アニメーション制御部12からネイティブ変数を取り込むことで、GUIオブジェクトOB1の現在の位置を認識することができる。そして、インタプリタ部11は、現在のマウスポインタPTの位置と、認識した現在のGUIオブジェクトOB1の位置とから両者の重なり状態の変化を検出することができる。
【0130】
そして、重なり状態の変化を検出した場合は、例えば、その変化に応じて予め定められたプログラムを実行する。これにより、インタプリタ部11は、アニメーションの実行中であってもユーザからの操作に対応することが可能となる。
【0131】
一方、アニメーションの表示が開始されると、アニメーション制御部12がネイティブ変数を逐次更新させてアニメーションの描画処理が実行されるため、アニメーションの実行速度を上げることができる。
【0132】
なお、上記説明では、ポインタ情報登録指示は1回だけ出力される場合を例に挙げて説明したが、アニメーションの実行途中において、ポインタ情報登録指示は何回出力されても良い。この場合、インタプリタ部11は、例えば、マウスボタンがクリックされる等の入力イベントが発生したときに、ポインタ情報登録指示を出力すればよい。そして、インタプリタ部11は、ポインタ情報登録指示に入力イベントが発生したときのマウスポインタPTの位置を含ませ、この位置をポインタ情報記憶部27に記憶させればよい。
【0133】
ポインタ情報登録指示を受け付けたアニメーション制御部12は、このポインタ情報登録指示に含まれているマウスポインタPTの位置をポインタ情報記憶部28に記憶させ、ネイティブ変数を更新する毎に、このマウスポインタPTの位置とネイティブ変数とを比較してGUIオブジェクトOB1とマウスポインタPTとの重なり状態の変化を検出すればよい。
【0134】
なお、
図1及び
図10に示す各ブロックは、典型的には集積回路であるLSIにより実現される。LSIにより実現する場合、各ブロックは個別に1チップ化されても良いし、一部又は全てが含まれるように1チップ化されても良い。
【0135】
ここで、LSIには、集積度の違いにより、IC、LSI、システムLSI、スーパーLSI、ウルトラLSI等が含まれる。
【0136】
また、集積回路化の手法としては、LSIに限られず、専用回路又は汎用プロセッサで実現してもよい。また、LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【0137】
更には、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて各ブロックの集積化を行ってもよい。LSIに置き換わる集積回路の技術として、例えばバイオ技術によるものが可能性としてあり得る。
【0138】
また、
図1及び
図10に示す各ブロックをソフトウェアにより構成してもよい。この場合、コンピュータをアニメーション描画装置10として機能させるためのアニメーション描画プログラムをコンピュータにインストールすることで、
図1及び
図10に示す各ブロックを実現すればよい。このアニメーション描画プログラムは、DVD−ROMやCD−ROM等のコンピュータ読み取り可能な記録媒体に格納してユーザに提供されてもよい。また、アニメーション描画プログラムをWEBサーバ上に格納し、インターネットを介してダウンロードさせることでユーザに提供してもよい。
【0139】
この場合、
図1に示すインタプリタ部11〜グラフィクス描画制御部13は例えばCPUにより構成され、グラフィクスプロセッサ部14は例えばGPUにより構成され、スクリプトデータ記憶部21〜ネイティブ変数記憶部26は例えばRAM、ROM、フラッシュメモリ等の書き換え可能な記憶装置により構成されることになる。
【0140】
また、
図10では、インタプリタ部11〜グラフィクス描画制御部13がCPUにより構成され、グラフィクスプロセッサ部14がGPUにより構成され、ポインタ情報記憶部27,28、スクリプト変数記憶部25、及びネイティブ変数記憶部26が記憶装置により構成されることになる。
【0141】
次に、本発明の具体例について説明する。
図13は、本発明の実施の形態1及び2のアニメーション描画装置10において用いられるスクリプトデータの一例を示した図である。
図14は、従来のGUIアニメーション描画装置において用いられていたスクリプトデータの一例を示した図である。以下、
図13と
図14とのスクリプトデータを対比説明する。まず、
図14の従来のスクリプトデータから説明する。
【0142】
1行目〜3行目:HTML文書の開始宣言である。3行目において、このスクリプトデータのタイトルがサンプルスクリプトであることが宣言されている。
【0143】
4行目〜5行目:JavaScript(登録商標)がHTMLに埋め込まれていることを宣言している。
【0144】
6行目:アニメーションの1フレームの間隔を決定するタイマーの値が規定されている。
【0145】
8行目〜12行目:2次元の座標を格納するためのクラスの宣言である。
【0146】
14行目:GUIオブジェクトの完了点を格納する変数のデータ構造の宣言である。
【0147】
15行目:GUIオブジェクトの変化量を格納する変数のデータ構造の宣言である。
【0148】
17行目〜26行目:サンプルスクリプトのメインルーチンである。
【0149】
19行目〜20行目においてGUIオブジェクトの開始点の変数が宣言され、開始点の値がその変数に格納されている。21行目〜22行目において完了点の変数が宣言され、その変数に完了点の値が格納されている。23行目〜24行目において変化量の変数が宣言され、その変数に変化量の値が格納されている。25行目において、アニメーション開始の関数(anime)が呼び出されている。この25行目の関数がアニメーション描画指示に該当する。
【0150】
28行目〜31行目:アニメーションの終了時に呼び出される関数(done)の宣言である。
【0151】
33行目〜40行目:1フレームの描画を開始する関数(anime)の宣言である。35行目〜38行目で完了点と変化量とがX成分及びY成分に分解され、一時的に変数に格納され、39行目で1フレームを描画する関数(moveObj)が呼び出される。
【0152】
42行目〜56行目:1フレームを描画する関数(moveObj)の宣言である。44行目においてアニメーション対象のGUIオブジェクトのIDが取得されている。45行目においてGUIオブジェクトのX成分が23行目で宣言されたX成分の変化量だけ加算されている。46行目において、GUIオブジェクトのY成分が24行目で宣言されたY成分の変化量だけ加算されている。47行目においてアニメーションが完了したか否かが判定され、完了していない場合、49行目〜50行目が実行され、完了した場合、54行目が実行される。
【0153】
49行目〜50行目において、waitTimeが経過する毎に関数(moveObj)が実行され1フレームが描画される。54行目において、アニメーション終了時に呼び出される関数(df=done)が呼び出される。
【0154】
57行目〜58行目:HTML文書に埋め込まれたJavaScript(登録商標)の終了宣言である。
【0155】
59行目:HTML文書のHEAD部の終了宣言である。
【0156】
60行目:HTML文書のロード時にサンプルスクリプトのメインルーチンを呼び出すための宣言である。
【0157】
61行目:アニメーション対象のGUIオブジェクトを示す文字列の宣言であり、GUIオブジェクトを指定するための“id”として“obj”が指定されている。
【0158】
62行目〜63行目:HTML文書の終了宣言である。
【0159】
このように、従来のスクリプトデータでは、例えば、44行目に示すように1フレームを描画する毎に、idを取得するための検索処理が実行され、アニメーションの実行速度を上げることは困難であった。
【0160】
次に、
図13について説明する。
図13において、
図14と同じスクリプトは説明を省略する。
【0161】
33行目〜36行目:従来のスクリプトデータと異なる箇所である。35行目の“nativeAnime”により、アニメーション制御部12に制御が移される。つまり、インタプリタ部11は、17〜26行目のメインルーチンのスクリプトを逐次解釈していき、アニメーション描画指示である25行目の“anime”を解釈すると、35行目の“nativeAnime”にしたがって、”ObjName”、“ep”、“d”、“df”等のスクリプト変数を描画依頼として、アニメーション制御部12に出力し、アニメーション制御部12に制御を移す。
【0162】
これにより、アニメーション制御部12は、“nativeAnime”に対応するネイティブ言語のプログラムモジュールを実行することで、アニメーションを描画する。
【0163】
そして、アニメーション制御部12は、アニメーションが完了すると完了通知をインタプリタ部11に出力する。アニメーション制御部12は、ネイティブ言語で記述されたプログラムモジュールを実行してアニメーションを描画するため、1フレームを描画する毎に
図14の44行目に示すような検索処理を実行する必要がない。よって、アニメーション描画装置10によれば、アニメーションの実行速度を高めることができる。
【0164】
なお、
図13及び
図14で示したスクリプトデータは、従来のGUIアニメーション描画装置とのスクリプトの差異を示すための典型例であり、その趣旨を示す以外の内容は省略している。また、その趣旨にしたがい種々の変形が可能である。
【0165】
上記のアニメーション描画装置の技術的特徴は下記のようにまとめることができる。
【0166】
(1)上記アニメーション描画装置は、インタプリタ型のスクリプト言語で記述されたスクリプトデータを実行することでGUI(グラフィカルユーザインターフェイス)をアニメーション表示するアニメーション描画装置であって、前記スクリプトデータをインタプリタ方式で逐次解釈するインタプリタ部と、ネイティブ言語で記述されたプログラムモジュールを実行することで、前記GUIをアニメーション表示するアニメーション制御部とを備え、前記インタプリタ部は、所定のスクリプト変数を用いて定義されたアニメーション描画指示を解釈したとき、描画依頼を前記アニメーション制御部に出力し、前記アニメーション制御部は、前記描画依頼を受け付けたとき、前記スクリプト変数を前記ネイティブ言語の形式のネイティブ変数に変換し、前記ネイティブ変数を逐次更新しながら前記GUIをアニメーション表示する。
【0167】
この構成によれば、アニメーション制御部は、インタプリタ部とは独立したネイティブ変数を逐次更新しながらGUIをアニメーション表示することができる。そのため、アニメーション制御部は、アニメーションの途中でインタプリタ部にアクセスする必要がなくなり、インタプリタ部にアクセスした際にインタプリタ部で発生していた検索処理が無くなる結果、アニメーションの実行速度を高めることができる。
【0168】
(2)前記アニメーション制御部は、前記スクリプト変数に基づいて、アニメーションを開始してから完了するまでの1又は複数の描画時点における前記GUIの状態を示す変更予定情報を生成し、前記変更予定情報が示す描画時点に到達したとき、その描画時点における前記ネイティブ変数を前記インタプリタ部に出力すると共に、アニメーションが完了したとき完了通知を前記インタプリタ部に出力することが好ましい。
【0169】
この構成によれば、アニメーション制御部は、変更予定情報が示す描画時点に到達したときにだけ、ネイティブ変数をインタプリタ部に出力している。これにより、アニメーション制御部とインタプリタ部との間でのデータの授受の回数が大幅に減少する結果、アニメーションの実行速度の低下を防止することができる。
【0170】
(3)前記アニメーション制御部は、前記変更予定情報を前記インタプリタ部に出力することが好ましい。
【0171】
この構成によれば、インタプリタ部も変更予定情報を保持しているため、インタプリタ部及びアニメーション制御部間で授受されるデータ量を減少させることができ、アニメーション制御部及びインタプリタ部の処理負担の軽減を図ることができる。
【0172】
(4)前記インタプリタ部は、アニメーションが開始されたとき、前記スクリプト変数が前記ネイティブ変数と同期していないことを示す非同期フラグを立て、前記アニメーション制御部から前記完了通知を受けたとき、前記非同期フラグを倒し、前記非同期フラグを立てている間に、ユーザが入力装置を操作することで所定の入力イベントが発生した場合、前記アニメーション制御部に前記ネイティブ変数を出力させる同期処理を実行することが好ましい。
【0173】
この構成によれば、入力イベントが発生した場合、インタプリタ部は、アニメーション制御部に現在のネイティブ変数を強制的に出力させ、スクリプト変数とネイティブ変数とを同期させている。これにより、インタプリタ部は、現在のGUIオブジェクトの状態を認識することができ、入力イベントが発生したときにマウスポインタとGUIオブジェクトとが重なっていたか否かを判定する処理等を行うことができる。
【0174】
(5)前記インタプリタ部は、前記スクリプト変数に基づいて、アニメーションを開始してから完了するまでの1又は複数の描画時点における前記GUIの状態を示す変更予定情報を生成し、前記変更予定情報を前記アニメーション制御部に出力し、前記アニメーション制御部は、前記変更予定情報が示す描画時点に到達したとき、その描画時点における前記ネイティブ変数を、前記インタプリタ部に出力すると共に、アニメーションが完了したとき完了通知を前記インタプリタ部に出力することが好ましい。
【0175】
この構成によれば、(2)と同様、アニメーションの実行速度の低下を防止することができる。また、変更予定情報がインタプリタ部により生成されているため、アニメーション制御部の処理負担を軽減させることができる。
【0176】
(6)前記インタプリタ部は、前記変更予定情報を前記アニメーション制御部に出力することが好ましい。
【0177】
この構成によれば、アニメーション制御部も変更予定情報を保持しているため、インタプリタ部及びアニメーション制御部間で授受されるデータ量を減少させることができ、アニメーション制御部及びインタプリタ部の処理負担を軽減することができる。
【0178】
(7)前記インタプリタ部は、前記変更予定情報を前記アニメーション制御部に出力したとき、前記アニメーション描画指示が実行中であることを示すフラグを立て、前記完了通知を受けたとき、前記フラグを倒し、前記フラグを立てている間に、所定の入力イベントが発生した場合、前記アニメーション制御部に前記ネイティブ変数を出力させる同期処理を実行することが好ましい。
【0179】
この構成によれば、(4)と同じ効果を得ることができる。
【0180】
(8)前記変更予定情報は、アニメーションが開始されてから何番目のフレームであるかを示すタイムスタンプを用いて前記描画時点を示すことが好ましい。
【0181】
この構成によれば、タイムスタンプにより描画時点が指定されているため、アニメーション制御部は、アニメーションが開始されてから、更新されるフレーム数をカウントするだけで、ネイティブ変数の出力タイミングを検出することができる。
【0182】
(9)前記変更予定情報は、前記描画時点におけるGUIオブジェクトの属性情報を含むことが好ましい。
【0183】
この構成によれば、スクリプトデータで定義されている属性情報を用いて変更予定情報を生成することができるため、簡便な処理により変更予定情報を生成することができる。
【0184】
(10)前記インタプリタ部は、前記アニメーション描画指示を解釈したとき、画面上に表示されたポインタの位置を前記アニメーション制御部に出力し、前記アニメーション制御部は、前記インタプリタ部から出力されたポインタの位置を記憶装置に記憶させ、アニメーションの実行中に前記記憶装置に記憶させたポインタの位置と前記ネイティブ変数とを比較することで、前記GUIを構成するGUIオブジェクトとの前記ポインタとの重なり状態が変化したことを検出したとき、そのときの前記ネイティブ変数を前記インタプリタ部に出力することが好ましい。
【0185】
この構成によれば、インタプリタ部は、アニメーションの実行途中において、入力イベントが発生して、GUIオブジェクトの現在の状態を認識する必要が生じた場合、アニメーション制御部12からネイティブ変数を取り込むことで、GUIオブジェクトの現在の状態を認識することができる。
【0186】
(11)グラフィクスプロセッサ部を制御するグラフィクス描画制御部を更に備え、前記アニメーション制御部は、1フレームの描画時点に到達する毎に、前記ネイティブ変数を更新し、1フレームを描画するための描画指示を前記グラフィクス描画制御部に出力し、前記グラフィクス描画制御部は、前記アニメーション制御部から描画指示を受け付けると、受け付けた描画指示を、前記グラフィクスプロセッサ部が実行可能な低レベルの描画コマンドに分解し、描画コマンドを前記グラフィクスプロセッサ部に出力することが好ましい。
【0187】
この構成によれば、アニメーション制御部は、低レベルの描画処理をグラフィクス描画処理部に実行させるため、アニメーション制御部の処理負担を軽減することができる。
【0188】
(12)前記インタプリタ部は、ハッシュ検索を用いて前記スクリプト変数にアクセスすることが好ましい。
【0189】
この構成は、処理負担の大きなハッシュ検索を用いてスクリプト変数がアクセスされるが、(1)等の構成を採用することで、このアクセスの回数が減り、アニメーションの実行速度を上げることができる。