作成したウィンドウに変数を割り当てることでもm、そのウィンドウに含まれているディスプレイボックスを参照できます。その場合、添え字を使うことで、そのウィンドウ内のディスプレイボックスにメッセージを送ることができます。
たとえば、次のスクリプトは、正弦波のアニメーションを描きます。このスクリプトは、ウィンドウ内のフレームボックスにメッセージを送ることで、正弦波をランダムに変化させています。(スクリプトの途中で、フレームボックスを変数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(
/* 四角いハンドルのフェーズおよび振幅位置の現在値。
スクリプトは振幅(amplitude)の後のカンマの後始まる */
phase,
amplitude,
/* XとYはハンドルの位置に設定されたが、
最初の2つの引数で指定された値が更新されない限り
ハンドルは動かない */
phase = x;
amplitude = y;
);
// Handleは同様に動作するが、yが0.5という点が異なる
Handle( freq, .5, freq = x );
Text( // グラフにテキストを表示する
{3, 4},
"振幅: ",
Round( amplitude, 4 ), // 現在値を表示する
{3, 3.5},
"周波数: ",
Round( freq, 4 ), // 現在値を表示する
{3, 3},
"位相: ",
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 );
);