ひっさびさー!
第4回 nashikoのFLASH独学術 は
attachMovie
これは、ライブラリからムービクリップを画面内に配置するActionScriptです。
以前 duplicateMovieClip ってのを勉強しましたが、あれとはちょいと違いますよ。
さっきも言ったように attachMovie は、ライブラリから画面上に配置するもの
、 duplicateMovieClip は画面内にあるムービクリップを複製するものです。
前書きはこんなもんかなぁ、何となく分かってもらうとうれしかとです。
じゃーいってみますかねー。
今回はこんな物を作ってみましょう。
こっ、こんなの作ってみましょう・・・(汗
トランプ全部書くとか相当時間が掛かるので簡易でいきます、簡易で!
まずはーっと、画面に表示したいムービクリップをつくりましょう。
マジで適当な四角とかでいいです。
それをシンボルのムービクリップで保存しましょう。
とりあえず名前は何でもOK!
次が大事です。
リンケージの指定をしなくてはいけません。
リンケージ とは attachMovie で呼び出すときに使用する名前の事です。
では、作ったムービクリップにリンケージ名をつけましょう。
まずはライブラリパネルを開いて下さい。
開き方が分からない方は F11 を押して下さい。

そして、先程選択したムービクリップを右クリックするとこのような画面がでてきます。
下の方にリンケージと書いてあるのでそれを選択しましょう。

そして赤い線が書いてある所は必須項目です。
識別子は attachMovie で使用する名前です。
ここでは
sikaku
と、簡単に付けときます。
後は、okを押して下さい。
メイン画面に戻ったら先程作った画面に配置されているムービクリップを消して下さい。
消しておかないと attach されたか分かりにくいです。
次に、テキトーに押せるボタンをつくりましょう。
作ったボタンのインスタンス名は at_btn と付けましょう。
そしてレイヤーを追加し、1フレーム目を選択してActionScriptを書きます。

今回はボタンを押したらランダムに配置するようにします。
atCnt = 0;
at_btn.onPress = function(){
_root.attachMovie("sikaku","sikaku"+atCnt,atCnt);
dx = Math.random()*350;
dy = Math.random()*200;
sikaku_Name= "sikaku"+atCnt;
eval(sikaku_Name)._x = dx;
eval(sikaku_Name)._y = dy;
atCnt++;
};
今回も一つずつ説明しましょうか。
まずは1行目、
atCnt = 0; これはカウントとして使用します。今回は
attach したのをランダムに配置したり、深度を設定するのでカウントが必要になります。
あとは、深度が同じだったりすると以前表示されてたムービクリップが消去されてしまうのでカウントを利用するのがベストでしょう。
2行目は
at_btn を押したら下に記述してあるActionScriptを実行します。って事。
3行目が今回の主役です。
_root.attachMovie("sikaku" , "sikaku"+atCnt , atCnt);
attach する場所、
_root を指定します。
_root.attachMovie(
"sikaku" , "sikaku"+atCnt , atCnt);
リンケージ名を指定します。
_root.attachMovie("sikaku" ,
"sikaku"+atCnt , atCnt);
画面に配置するムービクリップのインスタンス名を付けます。
ここでは
"sikaku" の後に
+atCnt となってますね。
これは
"sikaku0" という名前になります。
_root.attachMovie("sikaku" , "sikaku"+atCnt ,
atCnt);
ここが深度です、同じ深度にならないようにします。
4行目、5行目はランダム配置するために適当な数字を
dx と
dy に格納させます。
6行目はかなり大事です。
sikaku_Name= "sikaku"+atCnt;
sikaku_Name に
sikaku + atCnt を格納するんですけど、これは
文字列として格納されます。
文字列は、
名前(インスタンス名)として
扱ってくれません。
簡単に言うとこのままでは
attach したムービクリップの位置の設定すら出来ないってことです。
とりあえず、これを書き直すと
atCnt には
0 が入っているのでプログラム上ではこうなります。
attachMovie で作られた
sikaku0 の
ムービクリップ
sikaku_Name に格納された
sikaku0 の
文字列
同じ文字なんですけど意味は全然違うわけです。
そして、今回はボタンを押すたびに
sikaku0
sikaku1
sikaku2
sikaku3
↓
sikakuN
というインスタンス名のムービクリップを無限に精製しようとしています。
これを一個一個設定していくとか無理なのでこのようなやり方になります。
この
文字列を
名前(インスタンス名)として呼んでくれるのが次の行の
eval
です。
この
eval を利用すれば簡単な事なんです。
eval(sikaku_Name)._x = dx;
eval(sikaku_Name)._y = dy;
もう、分かったでしょうか?
この
eval を使用し 画面に配置されたムービクリップを移動させるわけです。
これを普通に書くなら
sikaku0._x = 300(ランダム数値);
このようになります。
あとは
_y も同じ事をしてあげるといいです。
最後の
atCnt++;
これは
atCnt に
+1 するという意味です。
++ は
+1 と同じ意味なので活用しましょう。
なので次にボタンを押すと精製されるムービクリップは
sikaku1
となります。
じゃ、実行してボタンを押しまくって下さい!
どーでしょーか!?できましたかねー?
attach は簡単でもランダム配置にしようとするとこのようになるんです。
eval の使用方法も分かったので色々利用してみましょう。
attach をうまく?使用するとこのようなこともできます。
と、このような事もできます。
色々試して活かせるようにしましょー!
//----- 2007/03/19 追記 -----//
※ eval();を使わない方法
atCnt = 0;
at_btn.onPress = function(){
atmc = _root.attachMovie("sikaku","sikaku"+atCnt,atCnt);
dx = Math.random()*350;
dy = Math.random()*200;
atmc._x = dx;
atmc._y = dy;
atCnt++;
};コチラの方がスッキリして見やすいですね。
2005/6/29 - 1:22
|
コメント (0)
Category : FLASH独学術 AS2