randomize

2014/09/16

Arma3スクリプティング講座その7:スクリプトファイル

第七弾。どんどん行きましょう。
まずは前回の実習の答えから。
_hunter = "B_MRAP_01_F" createVehicle getPos player ;
_hunter setPos [getPos player select 0,getPos player select 1,10]
でした。まあすぐ押しつぶされるかもしれないけど。

さて、今回はスクリプトファイルの本命、繰り返し処理と遅延のお話をしていきましょう。
繰り返し処理っていうのは、まあ文字通り繰り返し一つのスクリプトを動かしてくれるものです。
じゃあ、次のスクリプトを動かしてみてください。
for "_i" from 0 to 3 do {
 _hunter = "B_MRAP_01_F" createVehicle getPos player ;
} ;
これが基本の繰り返しです。
さて、Hunterが4つ出てきました。先ほどのスクリプトは、
_hunter = "B_MRAP_01_F" createVehicle getPos player ;
_hunter = "B_MRAP_01_F" createVehicle getPos player ;
_hunter = "B_MRAP_01_F" createVehicle getPos player ;
_hunter = "B_MRAP_01_F" createVehicle getPos player ;
と全く同じ働きをします。このように一つ一つ書いていては整備性も悪いですが、繰り返し文を使うことでとても簡単にことを済ますことが出来ます。
さて、先ほどのスクリプトの構造はといえば、forスクリプトです。本当のことを言えば違う書き方もあるんですが、私はもっぱらこの書き方です。
で、このforスクリプトなんですが、ちょっと次のスクリプトを動かしてみてください。
for "_i" from 0 to 3 do {
 hint str _i ;
 sleep 1 ;
} ;
右上の表示に注目してください。1秒おきに表示が1ずつ増えています。
このforスクリプト、"_i"の部分には何でも入ります。スクリプトの中で_iを使えば現在の数字を取得することが出来ます。
…で、forスクリプトの挙動は分かったでしょうか。今回の場合は「0から3まで、_iが1ずつ増え、3か、それ以上になるとスクリプト終了」です。中のスクリプトが一周すると_iが1増えます。そして0から3、つまり4回繰り返されるのです。
今さらっと出てきたsleepですが、文字通り遅延させるスクリプトです。今回はsleep 1なので1秒の遅延なのですが、sleep 0.1などにすると0.1秒の遅延となります。
ちなみに、sleepスクリプトはユニットのInitializationなどでは動きません。基本スクリプトファイルの中専用と覚えておきましょう。

繰り返しスクリプトをもう一つ。次のスクリプトを動かしてください。
{
 _mrap = _x createVehicle getPos player ;
} forEach ["B_MRAP_01_F","O_MRAP_02_F","I_MRAP_03_F"] ;
三国のMRAPが登場しました。このforEachスクリプトは、直後のArrayの中身のデータをスクリプト内に組み込むことが出来る繰り返し処理です。この場合、スクリプト内で_xを使うことでArray内のデータを取り出せます。
{
 hint str _x ;
 sleep 1 ;
} forEach ["B_MRAP_01_F","O_MRAP_02_F","I_MRAP_03_F"] ;
このスクリプトを実行したほうが分かりやすいかもしれない。

【実習】forスクリプトで次の文を作る。
hintで現在の数字を取得し、sleepで現在の数字だけ処理を遅延させるスクリプトを5回繰り返す。
 

0 件のコメント :

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。