サンプル 04: 複数のオブジェクトの移動, MovieClipの利用


ソースは以下になります。コメントの形で説明しましょう。

 
     1  #!/usr/local/bin/ruby
     2
     3  require 'ming'
     4
     5  m = SWFMovie.new;
     6  m.setDimension(400,400);
     7  m.setRate(10);
     8
     9  mc1=SWFMovieClip.new;       ← 一つ目のMovieClipを生成する
    10
    11  s1 = SWFShape.new;
    12  s1.setLine(1, 0xff, 0, 0);
    13  s1.movePenTo(-100,-100);
    14  s1.drawLine(200, 0);
    15  s1.drawLine(0, 200);
    16  s1.drawLine(-200, 0);
    17  s1.drawLine(0, -200);       ← 四角を描画する
    18
    19  imc1=mc1.add(s1);           ← MovieClipの四角を張り付ける
    20
    21  for i in (0 .. 90)          ← 繰り返し
    22    mc1.nextFrame;            ← MovieClipを次のフレームに
    23    imc1.rotate(4);           ← 回転させる
    24  end                         ← これで、四角が回転するMovieClipができる
    25
    26  mc2 = SWFMovieClip.new;
    27
    28  s2 = SWFShape.new;          ← 二つ目のMovieClipを作る
    29  s2.setLine(1, 00, 0xff, 0);
    30  s2.movePenTo(-100,-100);
    31  s2.drawLine(200, 0);
    32  s2.drawLine(0, 200);
    33  s2.drawLine(-200, 0);
    34  s2.drawLine(0, -200);
    35
    36  imc2=mc2.add(s2);
    37
    38  for i in (0 .. 90)
    39    mc2.nextFrame;
    40    imc2.rotate(4);
    41  end                         ← ここまでの処理は一つ目と同じ
    42
    43  i1 = m.add(mc1);            ← MovieClipを張り付ける
    44  i2 = m.add(mc2);            ← 同じく
    45
    46  i1.move(0,0);
    47  i2.move(400,400);
    48
    49  for j in (0 .. 360)         ← 繰り返し
    50    m.nextFrame;              ← 次のフレームに
    51    i1.move(1,1);             ← MovieClipその1を右下に移動
    52    i2.move(-1,-1);           ← MovieClipその2を左上に移動
    53  end
    54
    55  m.save('example04.swf');


表示される内容は、sample03の回転と似ていますが、内部の構造は全然違います。
このように動きのあるオブジェクトを表示させる方法は二種類あります。
一つはsample03のように、SWFShapeを張り付けて、それを動かす方法。
もう一つは、このサンプルのように、SWFMovieClipを生成し、その上で動きを付け つつフレームをすすめ、出来たMovieClipを張り付けてさらに動かすというものです。 このサンプルでは、SWFMovieに張り付けたMovieClipは移動だけしかしていません (49〜53行目)。回転はMovieClip内の動き(21〜24行目と38〜41行目)です。
Masahiko KIMOTO <kimoto@ohnolab.org>
Last modified: Fri Dec 26 18:26:22 JST 2003