DEF Sc Script {
eventOut MFFloat key
eventOut MFRotation keyValue
field SFInt32 kl 4
url "javascript:
function initialize () {
k = new MFFloat();
kv = new MFRotation ();
var pi2 = 2 * Math.PI;
for ( var i = 0; i <= kl; i++ ) {
k[i] = i / kl;
kv[i] = new SFRotation ( 0, 0, 1, pi2 * i / kl );
}
key = k;
keyValue = kv;
}
"
}
key [0, 0.25, 0.5, 0.75, 1]
keyValue [0 0 1 0, 0 0 1 1.5708, 0 0 1 3.14159, 0 0 1 4.71239, 0 0 1 6.28319]
これは CoordinateInterpolator によるモーフィングアニメでの海面の波の動き(あまりリアルではありませんが)を表したアニメーションです。
普通に key と keyValue を記述するとソース全体がとても大きくなりますが、
スクリプトで求めることによりソースをコンパクトに纏めることができました。
DEF Sc Script {
eventIn SFFloat set_fraction
eventOut SFRotation rotation
field SFFloat pi2 6.28
url "javascript:
function initialize () {
pi2 = 2 * Math.PI;
rotation = new SFRotation ( 0, 0, 1, 0 );
}
function set_fraction (f) {
rotation.angle = pi2 * f;
}
"
}
これは黄色いミサイルを画面一番奥にいる UFO に当てるゲームです。
画面右下のオレンジ色の発射ボタンを押すと、ミサイルがゆっくりと画面奥に進んで行きます。
画面下のスライダーでミサイルを左右に操作して、赤い隕石を避けながらミサイルを UFO に当ててください。
UFO にミサイルを当てることができると 10 点が加算されます。
ミサイルが赤い隕石に当たってしまう、もしくは何にも当たらずに画面奥まで進んでしまうと再装填されますので、もう一度発射ボタンを押してください。
ゲームオーバーはありませんので、適当なところで止めてください。