for文でonRelease


いまさらな、Flash8のネタシリーズですが、やっと出来たのでメモしておきます。
多数のボタンに対してonReleaseのスクリプトを書くのが面倒なので、for文をつかっていっぺんにすませる方法です。これが2年前に分かっていればよかったのに・・・。(笑)

  1. ステージ上に配置した、複数のムービークリップインスタンス(画像のサムネイル、インスタンス名がbox1〜box7)を、ボタンとして使用する。
  2. これらのボタンをonReleaseすると、ステージ上に大きな画像(foto1〜foto7)を、foto_mcとしてattachMovieする。
  3. 同時に、onReleaseしたサムネイル上にcoverというムービークリップをattachMovieし、ボタンが押されている状態を表現する。


今まで書いていたスクリプト

box1.onRelease = function() {
_root.attachMovie("foto1", "foto_mc", 0, {_x:5, _y:5});
_root.attachMovie("cover", "cover_mc", 1, {_x:480, _y:12});
};
 ・
 ・
 ・
途中省略
 ・
 ・
 ・
box7.onRelease = function() {
_root.attachMovie("foto7", "foto_mc", 0, {_x:5, _y:5});
_root.attachMovie("cover", "cover_mc", 1, {_x:480, _y:297.6});
};

for文を使って、一回分のスクリプトで7個のボタンを動かせないか?と思いつづけてはや幾年。
7個ならまだいいが、ボタンがたくさん増えれば増える程、スクリプトを書くだけでも面倒くさい。
で、いまごろになってですが、どうやって書いたらいいのだろう?とググっていたらふと解決!してしまいました。コレちょっとうれしい・・・。(笑)
Flash8ではいちおう動いているので、メモしておきます。

for (i=1; i<=7; i++) {
	this["box"+i].no = i;
	this["box"+i].onRelease = function() {
		_root.attachMovie("foto"+this.no, "foto_mc", 0, {_x:5, _y:5});
		_root.attachMovie("cover", "cover_mc", 1, {_x:480, _y:12+(this.no-1)*47.6});
	};
}


追記
box1〜box7のx,y座標に合わせて、cover_mcをattachMovieするように変更しました。
これで、box1〜box7のムービークリップインスタンスがどこにあっても、ボタンの上にcover_mcがおけるようになります。ちょっと便利カモしれません。

for (i=1; i<=7; i++) {
	this["box"+i].no = i;
	this["box"+i].onRelease = function() {
		_root.attachMovie("foto"+this.no, "foto_mc", 0, {_x:5, _y:5});
		_root.attachMovie("cover", "cover_mc", 1, {_x:_root["box"+this.no]._x, _y:_root["box"+this.no]._y});
};
}


参考記事:http://qanda.rakuten.ne.jp/qa4626875.html
http://suzupara.iinaa.net/kiso351.html