Anarkのビヘイビアを自作してみよう 第2回

| | コメント(0) | トラックバック(0)
Anark Gallery
Introduction to create Anark behavior 02 EYES JAPAN Web3D Project > Anarkのビヘイビアを自作してみよう!

Anarkのビヘイビアを自作してみよう!

まともにプログラミング言語を勉強したことがない僕が無謀にも 挑戦するという身の程知らずなページです。

DirectorにRingoというスクリプト言語があるように、 AnarkにもJScript(俗にいうジャバ・スクリプト)というスクリプト言語で 色々制御できる仕掛けが用意されていて、今回はそれを使って遊んでみようという訳なのです。

第1回からずいぶんご無沙汰してしまい、企画倒れがささやかれたかもしれませんが、 単に僕の怠慢が招いた事態なので安心(?)して下さい。すみません。すみません。(汗

第2回 式を使った移動

前回はスクリプトでオブジェクトを回転させてみましたが、今回は移動させてみましょう。

前回の例により、オブジェクトの動作が式で制御できることがわかりました。 これによって、式次第で、手付けでは難しい動作も可能になります。

前回は回転でしたが、ほぼ同じ書き方で横にも縦にも奥にも移動ができます。 では早速、X座標、Y座標、Z座標を同時に変化させて、斜めの移動をしてみましょう。 スクリプトの書き方は前回を参考にしてください。


(リスタートしてみてください。マウスで回して色んな角度から見てください。)

スクリプトは次のようになっています。

function onUpdate(){
  parent.position.x += 1;
  parent.position.y += 1;
  parent.position.z += 1;
  }

各文の意味や役割は前回と殆ど同じです。今回は、式のみが異なっています。

しかし、この程度の移動はキーフレームで作ったほうが早いので、わざわざスクリプトでやる必要はないと思います。 というわけで、次はスクリプトならではの動きをやってみましょう。 といっても実は僕もまだまだ全然わかっていないので、とりあえず、円の軌跡にそって動かしてみましょう。
「え、それはRotatorビヘイビアでできるんじゃない?」
と思った方、安心してください。 左がRotatorで、右が円の軌跡にそった運動です。

これを作るために必要なのがsin関数とcos関数です。 実はMakeRingビヘイビアを参考にしたのですが (これに関しては次回以降で)、 超久々に高校の教科書を取り出してみると、 円の運動はsinとcosによって書き換えることができるそうです。

「この程度のプログラムにこんなグラフ持ち出して( ´,_ゝ`)プッ」という方がいらっしゃるかも知れませんが、馬鹿なので勘弁してください・・・。
上図から、

sinはおおまかに、 1 -> 0 -> -1 -> 0 -> 1 という流れで、
cosはおおまかに、0 -> 1 -> 0 -> -1 -> 0 という流れです。

これらをそれぞれ、縦(Y軸方向)と横(X軸方向)の動きに割り当てることで半径1の円に沿った動きができます。スクリプトは次のとおり。

function onAttach(){
  n = 0;
  }
function onUpdate(){
  n+=1;
  parent.position.x = 150 * Math.sin(n*2*Math.PI/(5*30));
  parent.position.y = 150 * Math.cos(n*2*Math.PI/(5*30));
  }

onAttach関数では、次のonUpdate関数で使う変数nを初期化しています。これは、このようにしておかないと、いきなりonUpdate関数の中でn+=1;としてもエラーがでるからです。
onUpdate関数では、あらたにMath.sinやMath.PI が使われていますが、これはMathというJavascriptが数学用の関数等を集めて用意してくれたオブジェクトです。
Math.sinやMath.cosは先に説明したとおりで、Math.PIというのは、読みのごとく、のことです。3.141592...とかいうやつです。
ここで注意が必要なのですが、それは、sinやcosなどの関数は引数に「ラジアン」を取るということです。ラジアンとは、半径1の円の一周を
2*PI とさだめたものだそうです。そのような理由から、引数にnをそのまま取ると動きが速すぎたので、適当に落としてみました。

左のRotatorビヘイビアでは一周を5秒に設定したので、2*PI(一周)を5で割るのですが、onUpdate関数は1秒ごとに描画するのではないので、とりあえず1秒あたりの最高のフレームレートである30フレームで更に割ってみました。ちなみにAnarkは環境に応じてフレームレートを変えるのでこれでは処理内容によって回転が速くなったり遅くなったり、また、マシンごとに動作の速度が変わってしまいます。この問題も次回以降で挑戦してみたいと思います(挑戦とはいっても既存のありがたいビヘイビアを参考にするのですが・・・)。

ちなみに周期を変えることで軌道を変えることができます。色々試してみてください。(引数に1/4*Math.PIを足す等)

というわけで、今回の内容はどうだったでしょうか。前回の内容が基本の全てだと思うので、
今回は動きと式をどう結びつけるか、というようなことが伝われば幸いです。
ではまた。

お疲れ様でした!

今回使用したプロジェクトファイル: move_circle01.amw move_circle02.amw move_xyz.amw

 


EYES JAPAN Web3D Project > Anarkのビヘイビアを自作してみよう!

トラックバック(0)

このブログ記事を参照しているブログ一覧: Anarkのビヘイビアを自作してみよう 第2回

このブログ記事に対するトラックバックURL: http://www.web3dnews.org/mt/mt-tb.cgi/47

コメントする

メニュー

バナー

アーカイブ

この日記のはてなブックマーク数