電子書籍の厳選無料作品が豊富!

以前複数のムービークリップを作る方法を
教えていただいたのですが、そのムービークリップ
をボタンにしたいのですがうまく行きません。

for (var i = 1; i<5; i++) {
  _root.createEmptyMovieClip("mc"+i, i);
  var load_mc = _root["mc"+i];
  _root.test = load_mc;
  var jpg = i+".jpg";
  load_mc.loadMovie(jpg);
  i = i-1;
  load_mc._x = i*200;
  i = i+1;
}

onEnterFrame = function () {
  for(var t=1;t<5;t++){
var load_mct = _root["mc"+t];
load_mct.onPress = function(){trace(t);
  }
 if(_xmouse>540 && _root.mc1._x<=-1) {
  for (var j = 1; j<5; j++) {
var load_mcj = _root["mc"+j];
load_mcj._x += 10;
  }
 }
 if(_xmouse<10 && _root.mc1._x>=-1*((test*200)-560)) {
  for (var j = 1; j<5; j++) {
var load_mcj = _root["mc"+j];
load_mcj._x -= 10;
  }
 }
}

多分EnterFrameの中に記述するのがおかしい
と思うのですが、いったいどこに記述しないと
いけないのがわからないので、どなたか
ご教授ください。

A 回答 (1件)

状況全体が良くつかめませんが,



> そのムービークリップ
> をボタンにしたいのですがうまく行きません。

の部分について回答します。

onEnterFrame = function () に関してはとりあえず抜かせてもらうとして,
おそらく次のようにしたいのではないでしょうか(コピペ可)↓

----------------------------------------
for (var i = 1; i<5; i++) {
_root.createEmptyMovieClip("mc"+i, i);
var load_mc = _root["mc"+i];
var jpg = i+".jpg";
load_mc.loadMovie(jpg);
i = i-1;
load_mc._x = i*200;
i = i+1;
// ★本当はここで定義したい↓
load_mc.onPress = function() {
trace("あいうえお");
};
}
----------------------------------------

しかし,
load_mc.onPress を定義できないので,
onEnterFrame = function () で定義した。
ということではないかと思います。

これはなぜ定義できないかというと,
定義した後に JPEG がロードされるので,
せっかく定義した load_mc.onPress が破棄されるからです。

プログラミング上は次のような流れでです。
(1) 空のムービークリップを作成
(2) そこに JPEG をロード
(3) そのムービークリップに動作定義

しかし現実はそうならず次のようになります。
(1) 空のムービークリップを作成
(2) そのムービークリップに動作定義
(3) そこに JPEG がロードされる

ロード命令自体は即実行されますが,
実際にロードされるのには時間が必要です。

ムービークリップ内に動作や変数を定義しても,
その後に JPEG が読み込まれると,
すべては JPEG に乗っ取られてしまうので,つまり破棄されてしまうということです。


この件に関して簡単に対処するには,
次のような方法が考えられます。

空の親ムービークリップの中に,さらに空の子ムービークリップを作成して,
その子ムービークリップに JPEG をロードするという方法です。
これだと,子ムービークリップは JPEG に乗っ取られてしまっても,
親自体は残っているので,親の動作定義は残ります↓。

-----------------------------------------
for (var i = 1; i<5; i++) {
_root.createEmptyMovieClip("mc"+i, i);
var load_mc = _root["mc"+i];
// ●_root.mc1~4内にさらに my_mc を作成
load_mc.createEmptyMovieClip("my_mc", 0);
var jpg = i+".jpg";
// ●_root.mc1~4内の my_mc に jpg をロード
load_mc.my_mc.loadMovie(jpg);
i = i-1;
load_mc._x = i*200;
i = i+1;
// ★するとここで定義できる↓
load_mc.onPress = function() {
trace("あいうえお");
};
}
-----------------------------------------

実際の時間的流れは次のようになります
(1) 空の親ムービークリップを作成
(2) そこに空の子ムービークリップを作成
(2) 親ムービークリップに動作定義
(3) 子ムービークリップに JPEG がロードされる


その他,
loadMovie でロードするのではなく,
MovieClipLoader クラスのメソッドを使って,
「JPEG のロードが完了次第→動作定義する」
という方法もあります。

loadMovie では,ただ読み込み命令をするだけで,
JPEG などが
「実際に存在するのか」
「読み込み中なのか」
「読み込みが完了したのか」などなどを把握できません。

MovieClipLoader クラスを使うと,
それらのことがわかるので,
「JPEG のロードが完了次第→動作定義する」
ということが可能になります。
この回答では省略しますが参考までに↓。

「MovieClipLoaderクラスについて」
http://www.fumiononaka.com/TechNotes/Flash/FN050 …

Flashゲーム講座&ASサンプル集【ファイルの読み込みについて】
「SWF、JPEGファイルを読み込みたい(FlashMX2004以降)」
http://hakuhin.hp.infoseek.co.jp/main/as/import. …



======================

次に onEnterFrame = function () の方ですが,
すみませんが,これは状況がよくわかりません。
動きが変なような気がします...。
理解することに挫折しました。降参です。

実際に動かそうとされている動きとは全く違うと思いますが,
代わりとなるサンプルを勝手に用意しました。
こんな感じで活用すればいいのではないかという単なる例だと思ってください。

--------------------------------------
// 変数 flag の初期化
var flag = 0;
//
for (var i = 1; i<5; i++) {
_root.createEmptyMovieClip("mc"+i, i);
var load_mc = _root["mc"+i];
// ◎各ムービークリップに固有の変数を代入
load_mc.n = i;
// ●_root.mc1~4内にさらに my_mc を作成
load_mc.createEmptyMovieClip("my_mc", 0);
var jpg = i+".jpg";
// ●_root.mc1~4内の my_mc に jpg をロード
load_mc.my_mc.loadMovie(jpg);
i = i-1;
load_mc._x = i*200;
i = i+1;
// ★するとここで定義できる↓
load_mc.onPress = function() {
// flag に 自分自身の n の値を代入
_root.flag = this.n;
// ※次は単なる例 です
// 変数 datum(基準)を自分自身の中心と一致させる
_root.datum = this._x+this._width/2;
};
}
// ※以下は単なる例です
_root.onEnterFrame = function() {
// flag が1であれば
if (_root.flag<>0) {
// 基準となる座標をステージ中央に近づける
_root.datum += (Stage.width/2-_root.datum)/10;
// 各ムービークリップを基準となる座標と並行移動
for (var i = 1; i<5; i++) {
var load_mci = _root["mc"+i];
load_mci._x = 200*i-load_mci._width/2+_root.datum-(200*_root.flag);
}
}
};
--------------------------------------
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!