たとえば、次のスクリプトは、インタラクティブな正弦波を作成します。このスクリプトは、ウィンドウ内のフレームボックスにメッセージを送ることで、正弦波を自動的に変化させています。(スクリプトの途中でtfに割り当てています。)
amplitude = 1;
freq = 1;
phase = 0;
win = New Window( "揺れ動く波",
Graph Box(
Frame Size( 500, 300 ),
X Scale( -5, 5 ),
Y Scale( -5, 5 ),
Y Function( amplitude * Sine( x / freq + phase ), x );
Handle(
phase,
amplitude,
/* 四角いハンドルのフェーズおよび振幅位置の現在値。
スクリプトは振幅(amplitude)の後のカンマの後始まる */
phase = x;
amplitude = y;
/* XとYはハンドルの位置に設定されたが、
最初の2つの引数で指定された値が更新されない限り
ハンドルは動かない */
);
Handle( freq, .5, freq = x );
// Handleは同様に動作するが、yが0.5という点が異なる
Text( // グラフにテキストを表示する
{3, 4},
"amplitude: ",
Round( amplitude, 4 ), // 現在値を表示する
{3, 3.5},
"frequency: ",
Round( freq, 4 ), // 現在値を表示する
{3, 3},
"phase: ",
Round( phase, 4 ) // 現在値を表示する
);
)
);
tf = win[Frame Box( 1 )]; // Frame Box(グラフ)を取得
For( amplitude = -4, amplitude < 4, amplitude += .1,// 振幅のアニメーション
tf << Reshow // グラフを強制的に更新
);
amplitude = 1; // ループに使用して複雑な動きをさせる
freq = 1;
phase = 0;
For( i = 0, i < 1000, i++,
amplitude += (Random Uniform() - .5);
amplitude = If(
amplitude > 4, 4,
amplitude < -4, -4,
amplitude
);
freq += (Random Uniform() - .5) / 20;
phase += (Random Uniform() - .5) / 10;
tf << Reshow;
Wait( .05 );
);