
環境:Flash8 actionscript2.0
10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか?
ムービークリップそれぞれに
mc1 mc2 mc3 …mc10
とインスタンス名をつけています。
さらにその下位層に
mc1
└kai_mc
mc2
└kai_mc
・
・
・
mc10
└kai_mc
と置いています。
このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。
それぞれ個別に書くと
_root.mc1.onRelease=function(){
_root.mc1.kai_mc.nextFrame()
}
と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。
自分で以下のように書いてみました。
i=0
for(i=1; i>10; i++){
_root["mc"+i].onRelease.function(){
_root["mc"+i].kai_mc.nextFrame()
}
}
うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。
i=0
for(i=1; i>10; i++){
_root["mc"+i].onRelease.function(){
trace(i)
}
}
で出力すると
11と表示されるのでpassが違うとは思うのですが・・・
iを1~10で指定しているのになぜ11となるのでしょうか?
どうすればpass指定できるのでしょうか?
そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
#1です。
> なぜfunctionのあとだとi=11になるのでしょうか?
Flash の ActionScript に限らず
for 文で i を変えれば普通はそうなります。
それがルール(言語仕様)です。
ActionScript 限定で話をすると
例えば次の文をフレームに書いたとします。
---------------------
for (i=1; i<=10; i++) {
trace(i);
}
trace(i);
---------------------
上の文はパブリッシュ時に
次のように変換されて処理されます。
---------------------
i = 1;
while(i<=10){
trace(i);
i++;
}
trace(i);
---------------------
※ HugFlash の HugDimension モードでの 自作SWF 解析結果
for文 を使って書いても,
結局内部マシン語的には while文 と同値のものとして扱われるということです。
またその while文 には上のように変換されるので
i は 11 となって for文 から抜けます(while文 から抜けます)。
==================
> onRelease時に
>
> _global.hensuu=i
> //iはクリックしたmcの番号
>
> などとしたい場合はどうすれば可能なのでしょうか?
それは #1 の回答自体がヒントになっていると思いますが,
各 MC 内に i を固定してしまえば良いでしょう。
---#1のスクリプトを変更----------------
for (i=1; i<=10; i++) {
_root["mc"+i].num = i;
_root["mc"+i].onRelease = function() {
this.kai_mc.nextFrame();
trace(this.num);
};
}
-------------------------------------
「制御」→「ムービープレビュー」で
各 MC クリックをすれば動作検証できると思います。
その他,私の最近の回答より
「スクリプトをまとめて書くには」
http://okwave.jp/qa/q6341073.html
重ねてご丁寧に説明頂きましてありがとう御座います。
それぞれのMC内に変数を入れてしまうことで固定するということですか…大変勉強になりました。
whileに変換されるなど色々内部的に変換されてるんですね。自分で横道にそれて色々やってみて楽しかったです。
初心者なものでwhile文も使ったことなかった為いろいろと勉強になりました。
過去に回答されてる分も拝読させて頂きます。
深夜遅くにもかかわらず回答頂きまして本当にありがとう御座いました。
No.1
- 回答日時:
次のような感じでできると思います。
for(i=1; i<=10; i++){
_root["mc"+i].onRelease=function(){
this.kai_mc.nextFrame();
};
}
回答ありがとうございます。
なるほどthisを使うとできるんですね。
すこしずれてしまいますけどなぜfunctionのあとだとi=11になるのでしょうか?
onRelease時に
_global.hensuu=i
//iはクリックしたmcの番号
などとしたい場合はどうすれば可能なのでしょうか?
重ねての質問ですが回答いただければ幸いです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
スマホでサイトの画像を長押し→...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
potplayerについて質問です
-
flash (.swf) を編集したい
-
ゲオでカードを作るのは何歳か...
-
ダウンロードしたデジブックはa...
-
uwscでExcelに自動記入
-
アメブロで音声ファイルを貼る方法
-
[開発形態]UIレイアウトまでデ...
-
換気扇・経年変化
-
私のコンピューター上のファイ...
-
iframe インラインフレームにつ...
-
スマホでサイトの画像を長押し→...
-
Flash ブラウザ 段階的に排除 ...
-
ActionScript 3.0についての質...
-
アクションスクリプトを簡素化...
-
パソコンについて質問なんです...
-
Flashと普通のHTMLの表示速度に...
-
arduino プログラムについて
-
自分でチラシを作りたいです!...
-
更新されて起きた問題
-
ウディタで作ったゲームを公開...
おすすめ情報