前回の attachMovie メソッドはステージ上にないインスタンスを新たに配置するメソッドでしたが、すでにステージ上にあるインスタンスをコピーして新しいインスタンスを作成するには duplicateMovieClip メソッドを用います。

duplicateMovieClip は以下のように書きます。

コピー元インスタンス名.duplicateMovieClip(新しいインスタンス名, 深度);

コピーされたインスタンスはコピー元のプロパティを全て引き継ぐため、実行直後の見た目はそれぞれのインスタンスが重なっていてコピーされたかどうかがわかりません。そこで attachMovie でも用いた3番目の引数を利用します。

3番目の引数はインスタンスの各プロパティを設定した構造体になります。

iniset = { _x: 100, _y: 100, _xscale: 50, _yscale: 75}

X軸100、Y軸100の位置に縦がコピー元インスタンスの50%、横が75%のサイズでインスタンスをコピーするには以下のように記述します。

iniset = { _x: 100, _y: 100, _xscale: 50, _yscale: 75}
sampleMovie.duplicateMovieClip("copyMovie", 1, iniset);

attachMovie と同じく、コピーしたインスタンスに指定した深度が既に別のインスタンスに利用されていた場合、コピーしたインスタンスが優先され先にその深度を使用していたインスタンスは消去されます。
しばらく仕事が忙しくなるためこちらの更新は滞りがちになります。

というわけで今回はFlashのオススメ関連書籍のご紹介。


おしえて!!Macromedia FLASH MX 2004 毎コミおしえて!!シリーズ
Flash入門書としては定番中の定番。入門書だけあってActionScriptではなくイラストを書いたりアニメーションの部分の解説がメインです。

おしえて!!FLASH MX 2004 ActionScript 毎コミおしえて!!シリーズ
「おしえて」シリーズのActionScript入門書。いきなり難しい書籍から入らずここから徐々に勉強していくのも良いかも。

Flash MX ActionScript 逆引き大全 500の極意
私の愛用書。リファレンスの要素が強いのでActionScriptの基本を理解している人向けです。

続FLASH ActionScriptバイブル MXのツボ with Flash Communication Server MX
Flashを用いたライブチャットや動画配信機能を実現するFlash Communication Serverの解説がメインの書籍。個人でFCSを使用する事はまずないと思いますが、Flashの可能性を垣間見ることができると思います。

macromedia FLASH ActionScriptバイブルfor Windows & Macintosh
ActionScriptのことならこれ1冊でまかなえるかも?難点はその分厚さでしょうか。

FLASH OOP Advanced Web design books
オブジェクト指向の観点からActionScriptを解説した書籍。中級者以上向けです。


初めてFlashを触る場合は「教えて!!」シリーズを、ActionScriptをじっくり勉強したい場合は「macromedia FLASH ActionScriptバイブルfor Windows & Macintosh」か「Flash MX ActionScript 逆引き大全 500の極意」をオススメします。リファレンスとしては本のサイズと分厚さから言って後者の方が使いやすいと思います。
INTERNET WatchでMacromedia Flash Conference 2004の模様が紹介されています

軽く流して見てみましたが、あいかわらず金回りの良い企業などを相手に商売をしたいというMacromediaのスタンスがよくわかるイベントだったと思います。企業としては当然の行動なのでしょうが、Flashを始めDreamweaverやFireworks、FreeHandのUIの迷走や完成度の低さを考えるとどうも方向性を誤っているようにも思えます。

コンテンツを提供する側としてはFlexやFlash Communication Serverといったものはとても魅力的です。しかし開発リソースをそちらばかりに向けてしまい、既存のユーザに対するケアをおろそかにしてしまうMacromediaの姿勢には数年前から疑問を抱いています。そういう点ではFlashキラーに成り得たAdobeのLiveMotionが開発中止になってしまったのは非常に残念です。

で、Macromedia Centralはどうなったのやら・・・。
通常グラフィックやムービークリップといったインスタンスは手作業でステージ上に配置しますが、ActionScriptではこれを動的に配置や削除をすることが出来ます。

ActionScriptでインスタンスを配置するには attachMovie メソッドを用いますが、その前にシンボルプロパティでリンケージの設定をしておかなければなりません。

リンケージの設定方法は、まず設定したいシンボルをライブラリウィンドウで選択し、コンテキストメニュー(右クリックメニュー)から「プロパティ」を選択します。初期状態では基本設定しかできませんが、右下に並んでいるボタンのうち「高度な設定」ボタンをクリックすると詳細設定が可能になります。今回はこの詳細設定の「リンケージ」を設定します。

リンケージは最初は全てのチェックが外され、識別子の入力もできない状態になっています。まず「リンケージ」部分の「ActionScriptに書き出し」にチェックを入れてみましょう。すると同時に「最初のフレームに書き出し」にもチェックが入り、識別子が入力できるようになります。「最初の~」のチェックはそのままで、識別子は半角英数でわかりやすい名前を入力します。この識別子がActionScriptでこのシンボルを呼び出すのに用いる名前になります。

リンケージの設定が終わると実際にActionScriptからインスタンスを配置してみましょう。attachMovie メソッドの使い方は以下のとおりです。

attachMovie(リンケージ名, 新しいインスタンス名, 深度);

深度はステージ上に配置する順番で0から始まり、数字が大きいほど上に重なっていくようになります。

例えば _root にインスタンス jumbman を追加するには以下のように記述します。

_root.attachMovie("jumbman", "jumpman1", 0);

これで _root 上に jumpman1 というインスタンスが _root の座標(0, 0)の場所へ配置されました。しかしこの方法だと常に座標(0, 0)に配置されてしまうので別の場所へ配置したい場合はこの後にインスタンスを移動しなければなりません。ですがFlashMX以降のバージョンでは初期設定の構造体を4番目の引数にすることで配置する座標やサイズを指定することが可能になりました。

初期設定の構造体にはインスタンスのプロパティを指定します。

iniset = { _x: 100, _y: 100, _xscale: 50, _yscale: 75}

この構造体 iniset を先ほどのスクリプトに追加すると以下のようになります。

iniset = { _x: 100, _y: 100, _xscale: 50, _yscale: 75}
_root.attachMovie("jumbman", "jumpman1", 0, iniset);

インスタンス jumpman1 が _root の(100, 100)の位置に縦横50%の大きさで配置されます。

ちなみに、追加するインスタンスの深度は既にインスタンスの存在する深度を指定した場合、新しく追加するインスタンスが優先的に配置され既存のインスタンスは削除されるので注意が必要です。
当たり前ですがムービークリップはフレーム順に再生されますが、ActionScriptの prevFrame メソッドを用いれば逆再生を行うことができます。

使い方は簡単で、逆再生したいムービークリップに対して prevFrame() を指定するだけです。例えば人物が走る動作のムービークリップ「run」を逆再生させたい場合は、ムービークリップ「run」に

onClipEvent(EnterFrame) {
 run.prevFrame();
}

と記述します。

再生と逆再生を繰り返すには、ムービークリップ「run」の1フレーム目に

moveflag = "next";

最後のフレームに

moveflag = "prev";

と記述し、ムービークリップ「run」に以下のスクリプトを記述します。

onClipEvent(enterFrame) {
 if (moveflag == "next") {
  nextFrame();
 } else {
  prevFrame();
 }
}


ちなみに、prevFrame を続けてフレームが1まで来るとそれ以上の逆再生はできないので、見た目の上では停止したようになります。