Home > action script > 各MCにインデックスナンバリング

各MCにインデックスナンバリング

独学でプログラムを勉強してきたので、時々、ありえないぐらい初歩的なことを知らなかったりします。今回紹介するのは、最近、恥を忍んで人に聞いて、火が出るぐらい恥ずかしい思いをしたコーディングです。

今回作りたいのはこれ。

indexNumber.swf

各ボタンを押したら、各自の番号を出力するサンプルです。
それでは次のコードはどうなるでしょう?


for (var i:Number = 0; i<=5; i++) {
  //"mc_0"~"mc_5"を作成。
  var mc = this.createEmptyMovieClip("mc_"+i, i);
  //各MCの深度1にリンケージシンボル"btn"を"btn_0"~"btn_5"として作成。
  var btn = mc.attachMovie("btn""btn_"+i, 1);
  //ボタンにナンバリング。
  btn.num.text = i;
  //各MCをレイアウト。
  mc._x = 50*(i+1);
  mc._y = 200;
  //ここから注目!---------------
  mc.onPress = function() {
    _root.textBox.text = i;
  };
  //------------------------
}

上のサンプルをパブリッシュすると、次のようになります。

indexNumber_failed.swf

どのボタンをおしても同じ数"6"が出力されますね。ボタンを押すのはfor文が全部回りきった後なので、全てのループ終了後の i の値になるわけです。これは困ります。

話は脱線しますが、参考までに、なぜ"6"になるのでしょうか。これはfor文の評価の仕方を知っておく必要があります。こちらのサイトでも解説されていますが、上のコードの場合、for文は0から始まり、順にi++され、5になったところで最後のforループ処理が実行され、さらにi++されiが6になり、条件を評価、i<=5を満たしていないので、そこでfor文の処理が終了されるのです。よってiは6になっているわけです。

話を戻して、きちんと0~5のボタンを押したら各数値が出力されるようにしましょう。

お恥ずかしい話ですが、僕は今まで、インスタンス名が"mc_1"とかだったら、こちらのサイトの方のように、

this._name.split(”_”)[1];

とかで、アンダースコア以降の値を取得するという面倒なことをしていたのです。じゃあ"mc_01"の時は?アンダースコアがない時は?といろんな状況に出くわしてきましたが、上記リンクの方と同様に、if文を駆使してなんとか切り抜けてきたのですが、こんなことする必要はありませんでした。さきほどのコードの「注目」部分を

  //ここから注目!---------------
  mc.index = i;
  mc.onPress = function() {
    _root.textBox.text = this.index;
  };
  //------------------------

このように、インスタンス生成時に、各MCに変数としてインデックス値を持たせればよかったんです。

indexNumber.swf

以上、いまさら解説するのもお恥ずかしいのですが、僕と同じ穴をお持ちの方のためにエントリしてみました。

Comment:2

サトコン 2007-11-08 (木) 04:18

いきなりの投稿失礼いたします。
今頃まったく同じ問題で悩んでいます。

もしお時間ありましたら、ご返答いただきたいとおもっています。

下記空のMCに画像を読み込み、それをボタン設定し、ボタンを押すと他のMCに大きな画像が読み込まれるというフォトギャラリーをさくせいしています。
読み込み、ボタン設定までは、動いているのですが、
どのボタンをおしても同じ画像が出てきてしまいます。よろしければ、何かヒントをいただけますでしょうか?

var thumbs:Array = new Array ();

var mcl:MovieClipLoader = new MovieClipLoader ();
var obj:Object = new Object ();
var target:Number = 0;
var speed:Number = 2;


obj.onLoadInit = function () {
for (var i = 1; i thumbs[i] = _root["thumb" + i];
_root["thumb" + i]._y = 400;

thumbs.index = i;

_root["thumb" + i].onRelease = function(){
trace("2:"+this._name);

_root.load_mc.loadMovie("images/" + i + "_t.jpg", this.index);
}

//trace (_root["thumb" + i]._y);

////fadeIn ();
_root["thumb" + i].onEnterFrame = fadeIn;
}
};


function fadeIn (){
this._y += (220 - this._y) / speed;
//this._alpha -= 33.33
}

mcl.addListener(obj);
for (var i=1; i //_root.createEmptyMovieClip("thumb" + i , i);
var thumbs:MovieClip = _root.createEmptyMovieClip("thumb" + i , i, mc.getNextHighestDepth());
//var thumbs:MovieClip = _root.attachMovie("thumb" + 1, "thumb" , i);
mcl.loadClip("img/" + i + ".jpg", _root["thumb" + i]);
_root["thumb" + i]._x = ((i - 1)%20)*40;
//_root["thumb" + i]._y = Math.floor((i - 1)%20)*20;
trace("1:"+_root["thumb" + i]._name);


}

tera 2007-11-08 (木) 08:14

こんにちは。僕のブログのコメント欄は「不等号記号」を「<(アンドエルティーセミコロン)」指定しないとちゃんと表示されないのでfor条件式が上手く表示されてないと思いますが、さっと拝見したところ:
とりあえず12行目
_root.load_mc.loadMovie("images/" + i + "_t.jpg", this.index);

_root.load_mc.loadMovie("images/" + this.index + "_t.jpg", this.index);
にしましょうということを記事中で書いてるわけです。
なんといいましょうか、『後で呼び出されるようなやつは、forで最後までカウントアップが終わってしまった「i」ではなくて、「this.index」を参照する』という感じですー。そういうルールで他の箇所(もしあれば)もやってみればいいのではないでしょうかと思いました。
とりいそぎ。

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Trackback:0

TrackBack URL for this entry
http://www.trick7.com/blog/mt-tb.cgi/438
Listed below are links to weblogs that reference
各MCにインデックスナンバリング from trick7.com blog

Home > action script > 各MCにインデックスナンバリング

持っている Flash & ActionScript 関連本の中から、自分的おすすめの読む順番をご紹介。各書籍のレビューは books カテゴリからご覧頂けます。
この順番でどう?(AS3.0)
  • Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)
    Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)

    デザイン方面からFlashデビューして、そのままAS2.0を使うようになった人が、難しいと評判のAS3デビューする時の最初の1冊として、とにかく目を通しておくと良いかと思います。プログラミング経験の少ない方でも、サンプルをじっくり読めば、ゼロからのAS3デビュー可。
  • ActionScript 3.0 アニメーション
    ActionScript 3.0 アニメーション
    洋書「Making Things Move!」の日本語訳本。ActionScript3.0で数学的アニメーションを作ることがメインテーマなのですが、前半部分でAS3.0の基礎を分かり易く解説されています。後半の重力, IK, 3D表現等のアニメーション解説も楽しい。僕はこれのAS2.0洋書版を読んでFlashの面白さに気付きました。
  • Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    この次の辞典のような洋書を読む前の事前知識としてこの本の内容を理解しておくといいかも。
  • Essential ActionScript 3.0 (Essential)
    Essential ActionScript 3.0 (Essential)

    900ページ以上ある相当分厚い本。基礎からOOPまでを解説。ほぼ網羅しているので、これを抑えておけばAS3博士になれそう。
  • Actionscript 3.0 Cookbook
    Actionscript 3.0 Cookbook

    ActionScript3.0のリファレンス本。問題とその解決法が1ページぐらいで細分化されているので空いた時間にちょっとずつ読み進められる。WebでAS3のソースを見て勉強する時の字引としても使う。ただ、時期的に初期の本なので、AS3自体が仕様変更してたりするので正誤表は必読。
  • Object-Oriented Actionscript 3.0
    Object-Oriented Actionscript 3.0

    7/23に発売されたFlash&OOP本。AS2.0版は持っているのだけど、オブジェクト指向の初歩的な解説から入って、後半は僕の理解を超える難度になっていきました。今度こそ理解できるか?
この順番でどう?(AS2.0)
  • Foundation Actionscript Animation: Making Things Move (Foundation)
    Foundation Actionscript Animation: Making Things Move (Foundation)

    スクリプトでアニメーションさせる方法を学べる。プログラムの知識というよりも数学や物理の知識が必要。バネの表現や3D表現など、汎用性の高いテクニックを身に付けられ、個人の表現力をレベルアップするのに最適。参考までに、僕が調べた英単語リスト。2007年4月に、AS3対応版も発売されました。
  • ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers
    ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers

    「Making Things Move!」の世界を突き詰めたい人用のステップアップのための本。行列や物理運動、2D/3D表現。Flashの本ではなく、じっくり読むタイプの本なので、あとまわしにしてもいいかも。
  • Flash 8 Essentials
    Flash 8 Essentials

    Flash8の新機能を紹介。全10章が独立した構成で、興味のある部分から読めます。フィルタやビットマップ、ビデオの使い方とかを、基礎から順を追って理解していけるので、ゼロからスクリプティングできるようになる。僕はビットマップ関連の作業の際のリファレンスとして常用しています。
  • .fla―Idea of Flash Creation
    .fla―Idea of Flash Creation

    上の本でFlash8の基本を身に付けて、それをどう面白い表現に落とし込むかを学べます。深津さんの、試行錯誤・実験しやすいスクリプティング、クラス設計に凄さを感じました。YouTubeやFlickrのAPI、PHPとの連携記事も。
  • FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]
    FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]

    ここまでで表現力が付き、テンションが上がるので、その勢いで難解なオブジェクト指向に挑戦。プログラム経験のない人がいきなり英語のOOP本を読むのは厳しい。この本で継承とかインターフェースとかポリモーフィズムとかの用語を理解しておくといいかも。
  • オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
    オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

    Flashの本ではありませんが、OOPの概念を気軽に読めるボリュームで解説してくれます。英語と日本語のOOP用語の対応を図るためにも「Object-oriented Actionscript for Flash 8」と併読するのがおすすめ。なんとなく読んでおくだけでも結構違うのでは。
  • Object-oriented Actionscript for Flash 8
    Object-oriented Actionscript for Flash 8

    前半はOOPの利便性や基本の紹介。デザインパターンやMVCの理解。13章からグッと難しくなって大変。Flash8対応。
  • Essential Actionscript 2.0
    Essential Actionscript 2.0

    上の本よりもさらにOOPプログラマ向け。同じOOP本ということでやや重複しており、こちらはMX2004時代の本なので見送ってもいいかも。分かりやすい英語で良著。この本のAS3版が出たら間違いなく買い。

Page Top