2011年9月4日日曜日

scriptのすすめ4 ~forループとrandom関数~

forループの解説です。

maxscriptで使うforループの書き方は、基本的にはこのような↓2種類しかありません。
for i = 1 to 100 do
for o in selection do

場合によっては、iやoやselectionが別のものに置き換わったりしますが。
(以前書きましたが、iやoは何の文字でも良いです。)

では、forループでboxを10個作ってみましょう。
for i = 1 to 10 do
(
     box()
)
これでは、同じ場所に出来てしまうので、一個ずつ位置をずらします。

for i= 1 to 10 do
(
    b=box()
    b.pos = [i*25,0,0]
)

forループの中では、iという値を使うことが出来ます。
iの値はforループの回数毎に、1,2,3.....10と順番に変化していくので
上記の様なことが出来ます。

とこんな感じで基本は出来ました。

次にランダム関数を使ってみましょう。
ランダム関数は、実行される度にランダムな数字を返すメソッドです。

書き方は以下の様な感じです。

random 最小値 最大値

random 1 20 -- 1から20のうちのランダムな値を返す。
random 0.2 25.5 -- 0.2から25.5のうちのランダムな値を返す。

なぜ、2つ例を出したかというと、整数か小数点という違いです。
欲しいランダムな値を、整数値が欲しい場合は整数で書き、
小数点が欲しい場合は、小数点で書かないといけません。

では、boxをランダムに平面状に並べてみます。
for i = 1 to 10 do
(
    r = random -100 100
    b = box()
    b.pos = [r,r,0]
)

思った結果と違うかと思います。

これは、b.pos = [r,r,0]と書いてあるように、xとyの座標が同じランダム値が
入っている為に上記の様な結果になってしまいます。

なので、

for i = 1 to 10 do
(
    r1 = random -100 100
    r2 = random -100 100
    b = box()
    b.pos = [r1,r2,0]
)
この様に書くと望んだ結果になるかと思います。
ランダム関数は同じ書き方をしても、毎回毎回ランダムな値を返します。
ランダム関数を使うと、やっとスクリプトっぽい感じ(自動で行っている感)が
出てくると思います。

今回はこの辺で。

1 件のコメント :

匿名 さんのコメント...

いつもお世話になっています。
とてもわかりやすい記事で、少しづつですがmaxscriptを学んでいます。

早速forループを使い、スクリプトを作ろう考えました!

そこで、恐縮なのですが質問させていただきます。

選択したオブジェクトのモディファイヤのスタックを指定して集約するのはできないものなのでしょうか?
全体を集約することはできたのですが。。
例えば、一番上にかけてあるターボスムース以下を集約する等です。

次回の記事にでもこそっと取り上げてくれたら最高です^^