トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   とにかくFLASH【FLASHに関して全般】
     100個のムービークリップに同じスクリプトを記述したい場合
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hirahira
Åê¹ÆNo.10965
投稿日時: 2004-9-19 17:33
新米
居住地: 兵庫
投稿: 4
使用環境:
FLASHMX
WinXP
100個のムービークリップに同じスクリプトを記述したい場合
こんにちは。いきなり質問ですがよろしくお願いします。

例えばステージに木のインスタンスを100本配置するとして、その木一本一本すべてのクリップアクションに同じスクリプトを記述したい場合、

1.木一本一本すべてのクリップアクションにスクリプトを記述する
2.シンボルにスクリプトを記述したら配置したインスタンスすべてがスクリプトをもっている、というような他の何かいい方法

1.のしかただとすごく大変なので、2.の他の何かいい方法を探しているのですが、そんな方法はあるのでしょうか?
旭日ゆうほ
Åê¹ÆNo.10968
投稿日時: 2004-9-19 23:00
Bak@Fla名人
居住地: 心は岡山
投稿: 91
使用環境:
Windows Vista Home Premium
Flash MX2004 v7.2
Flex2 SDK
Flex3 SDK
FlashDevelop3.0.0 Beta7
Re: 100個のムービークリップに同じスクリプトを記述したい場合
こんにちは。

処理によっては「2の何か他の方法」は可能です。
木のムービークリップに、極端な例ですが、

onClipEvent(enterFrame) {
    this._parent._x += 3;
}

のような処理を書いて、
さらにそのスクリプトを書いた木のムービークリップをシンボルに変換すれば、
配置するだけで書いた処理をしてくれると思います。
引用:

hirahiraさんは書きました:

1.木一本一本すべてのクリップアクションにスクリプトを記述する
2.シンボルにスクリプトを記述したら配置したインスタンスすべてがスクリプトをもっている、というような他の何かいい方法

1.のしかただとすごく大変なので、2.の他の何かいい方法を探しているのですが、そんな方法はあるのでしょうか?


----------------
旭日ゆうほ
swf置いてます。AM902

capricorn
Åê¹ÆNo.10970
投稿日時: 2004-9-19 23:42
新米
居住地:
投稿: 12
使用環境:
windows2000,FLASH MX2004,
Re: 100個のムービークリップに同じスクリプトを記述したい場合
こんにちは、hirahiraさん。
2の方法に関して、私は以下の様な手を使っています。
もっとスマートな方法がある様な気がしますが。。。

1. 木のMC(MovieClip)を用意します。
2.木のMCをのせるための受け皿MCを用意します。
3.受け皿MCに木のMCを貼付けて、その木のインスタンスにスクリプトを記述します。
4.受け皿インスタンスをステージ上に必要な数だけ生成または貼付けます。

木のインスタンスは受け皿のインスタンス上にあるので動きなど気をつけなければならない点や、rootからのパスが長くなったりするなどあまり良い方法ではないかもしれませんがこれで大抵の動作はできると思います。

AS2.0ではもうちょっときれいにかけるんだろうか。。。
森 巧尚
Åê¹ÆNo.10972
投稿日時: 2004-9-20 0:38
モデレータ
居住地: 宝塚
投稿: 648
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: 100個のムービークリップに同じスクリプトを記述したい場合
いろんな方法がありますね。まず、
1.木一本一本すべてのクリップアクションにスクリプトを記述する

の方法の応用ですが、
【先にスクリプトを書いておく】
という方法がありますね。さきにムービークリップアクションを
onClipEvent(enterFrame) {
 this._x += 1;
}
のように書いておきます。これだけ。あとは、それを100個コピーすれば、スクリプトごとコピーされるので、スクリプトは1回書くだけですみます。ただし修正する場合は100回修正しないといけないのでたいへんですね。

次に、旭日ゆうほさんやhirahiraさんの言われるように【ムービークリップをまるごと「受け皿」のムービークリップの中にいれる】という方法がありますね。階層が1つ深くなりますが、それに注意しさえすれば考え方はわかりやすいんじゃないでしょうか。増やす場合もライブラリからドラッグ&ドロップでできます。

それから【ムービークリップの中にイベントハンドラメソッドで書く】という方法があります。ムービークリップの上にonClipEventと書くのではなく、ムービークリップの中の1フレーム目のフレームアクションに
this.onEnterFrame = function() {
 this._x += 1;
}
と書きます。こうすれば、自分自身で自分自身の動きを指示しているので、ライブラリからドラッグ&ドロップするだけで増やすことができます。これとこのひとつ上のが「2.シンボルにスクリプトを記述したら配置したインスタンスすべてがスクリプトをもっている」という方法ですね。

また【ムービークリップの外からイベントハンドラメソッドで書く】という方法もあります。ムービークリップに「mc_1」「mc_2」「mc_3」などと通しのインスタンス名を付けておいて、メインタイムラインの1フレーム目のフレームアクションに
for (i = 1; i <= 100; i++) {
 this["mc_" + i].onEnterFrame = function() {
 this._x += 1;
 };
}
と設定します。ここでムービークリップにスクリプトを指定するのを、1〜100まで繰り返し行っています。でも、100個のムービークリップにインスタンス名をつけるのがめんどくさいですね。

そこで【ムービークリップを複製しながらイベントハンドラメソッドで書く】という方法もあります。1つだけ「mc_0」というムービークリップを作り、これはダミーなので画面の外などに配置します。そして、メインのタイムラインの1フレーム目に
for (i = 1; i <= 100; i++) {
 newMC = mc_0.duplicateMovieClip("mc_" + i, i);
 newMC._x = Math.floor(Math.random() * 400);
 newMC._y = Math.floor(Math.random() * 300);
 newMC.onEnterFrame = function() {
  this._x += 1;
 };
}
と指定します。複製を作りながらスクリプトも指定しています。_xと_yをランダムで指定しているのはそのままだとすべてmc_0と同じ位置に作られるので、適当にばらけさせるためですが、この配置にこだわりたい場合はこれ以前の方法がいいと思います。

方法はいろいろあります。使いやすさと自分の理解の度合いとのバランスをとりながら使うのが一番いいと思いますよ。


----------------
森 巧尚
http://www.ymori.com

Duke15
Åê¹ÆNo.10979
投稿日時: 2004-9-20 8:59
常連
居住地: 埼玉
投稿: 196
使用環境:
XPpro,2Kpro,
MX2004prov7.2
FlashPro8
Flash9Preview α
Player8r24
Player9.0.16
Player7r63
Firefox1.5.0.5
IE6,NB8.1en
Re: 100個のムービークリップに同じスクリプトを記述したい場合
Tohgohです。

例えば、100個を全てアルファ値20にする場合として。
こういう方法もあります。
100個を置くベースMCを作り、その1フレーム目に


for (var name in this) {
this[name]._alpha = 20;
}


あとは、そのベース上に100個のMCを置けばいいだけ。

では。
引用:

hirahiraさんは書きました:
例えばステージに木のインスタンスを100本配置するとして、その木一本一本すべてのクリップアクションに同じスクリプトを記述したい場合、

1.木一本一本すべてのクリップアクションにスクリプトを記述する
2.シンボルにスクリプトを記述したら配置したインスタンスすべてがスクリプトをもっている、というような他の何かいい方法

1.のしかただとすごく大変なので、2.の他の何かいい方法を探しているのですが、そんな方法はあるのでしょうか?


----------------
site:
http://www.yumenext.com/
blog:
http://star.ap.teacup.com/flash/

野中文雄
Åê¹ÆNo.10982
投稿日時: 2004-9-20 10:29
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: 100個のムービークリップに同じスクリプトを記述したい場合
目的として、大きくふたつ考えられます。

[1]ひとつは、あるフレームに、スクリプトを設定したインスタンスが100個ほしいという場合です。

このときは、オーサリングあるいはスクリプトで、ひとつのインスタンスを必要な数だけ複製することが考えられます。森さんのご紹介された、最初と最後の方法がそれです。4番目の、インスタンスは予め配置して、スクリプトをスクリプトで設定するというのは、その中間の考え方でしょう。

[2]もうひとつは、シンボルとスクリプトを一体にして、[ライブラリ]に登録したい場合です。複数の異なった場所(フレームあるいはムービー)でシンボルを使い回したとき、スクリプトが設定された状態で使用したいということです。

このとき、まずフレームに記述したスクリプトは、シンボルとともに[ライブラリ]に登録されることが基本です。ところが、Flash 5では、フレームアクションにイベントハンドラを記述する方法がありませんでした。そこで、旭日ゆうほさんやcapricornさんがご紹介された、インスタンスを空のシンボルで包む(内包する)という方法が使われました。

MXでは、イベントハンドラメソッドが実装されましたので、これを利用されるのが便利だと思われます(森さんの3番目の方法)。

[3]ただ、イベントハンドラメソッドでも、異なったシンボルに同じスクリプトを設定したい場合には、スクリプトをコピーするしかありません。

このとき、MXではFlash 5の手法とイベントハンドラメソッドを、組合わせて対応することが考えられます。つまり、空のMovieClipシンボルのフレームアクションとして、_parentをターゲットに必要なスクリプトを記述します。
// MovieClip: 空のシンボル。他のシンボルに内包する。
// フレームアクション
var _mc = _parent;  // _parentをターゲットに指定
this.onEnterFrame = function() {
    _mc._x += 1;
};

この空のMovieClipインスタンスを、スクリプトの設定が必要な他のMovieClipシンボルに放込めば、空MovieClipのフレームアクションはそれらのシンボルに共通のスクリプトとして設定できます。

Flash MX 2004のActionScript 2.0では、スクリプトをクラス定義として、外部ActionScriptファイルに記述できます。すると、シンボルのプロパティにActionScript 2.0クラスの指定をするだけで、複数のシンボルに同じActionScript 2.0クラスを設定することが可能です。


----------------
 

hirahira
Åê¹ÆNo.10986
投稿日時: 2004-9-20 21:22
新米
居住地: 兵庫
投稿: 4
使用環境:
FLASHMX
WinXP
ありがとうございます!!
旭日ゆうほさん、capricornさん、森さん、東郷さん、野中さん、わかりやすい解説ありがとうございました。

全部試してみました。こんなにいろいろな方法があるんですね。

私の理想は野中さんが書かれていた目的の”[2]シンボルとスクリプトを一体にして、[ライブラリ]に登録したい場合”だったので、森さんの3番目の方法が野中さんのおっしゃる通り使いよさそうです。

とっても勉強になりました。みなさんありがとうございました
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops