アプリ版:「スタンプのみでお礼する」機能のリリースについて

AS初心者で、基礎的な部分を勉強しています。

それで、ムービークリップに次のようなプログラムを書いていて、短縮出来ないものかと思い、こちらで相談させていただきました。
直接回答を頂くのがありがたいのですが、この様な事に触れているサイト、書籍、などの情報も大変助かります。

//プログラム
on(rollOver){
this.gotoAndStop(2);
}
on(press){
this.gotoAndStop(3);
}
on(release){
this.gotoAndStop(2);
}
on(rollOut){
this.gotoAndStop(1);
}
on(dragOut){
this.gotoAndStop(1);
}

A 回答 (2件)

#1です。


すみません,見落としていた行がありました。
this.gotoAndStop(2);
は 2回 登場するのですね。
その他,細かい点も合わせて再び書き直します。
ほとんど変わりませんが,ややこしいので,#1の回答は無視してください。

///////////////////////////////////////////////////

on○○ するムービークリップが1つの場合,
ほとんど簡略不可能です。
せいぜいここまでです↓。

-------------------------------------
//プログラム
on (release, rollOver) {
this.gotoAndStop(2);
}
on (press) {
this.gotoAndStop(3);
}
on (rollOut, dragOut) {
this.gotoAndStop(1);
}
-------------------------------------

onイベントハンドラの () 内には複数のイベントのパラメータを「,」で区切って記入可能です。



on○○ するムービークリップが多数ある場合であるのなら,もっと簡略化できます。
手始めとして,
その,on○○ を書いたムービークリップのスクリプトを全て削除します。
そして,
on○○ を書いたムービークリップをダブルクリックして,
そのムービークリップ内の編集に入り,
フレーム1 に次のように書きます(場合によっては書き加えます)。

-------------------------------------
//プログラム
this.onRollOver = function() {
this.gotoAndStop(2);
};
this.onPress = function() {
this.gotoAndStop(3);
};
this.onRollOut = function() {
this.gotoAndStop(1);
};
this.onRelease = this.onRollOver;
this.onDragOut = this.onRollOut;
-------------------------------------

これは onイベントハンドラ ではなく,onイベントハンドラメソッドです。
一見,ぜんぜん簡略化されていませんね。
むしろこの回答で最初に書いたスクリプトの方が簡略化されています。

しかし,こちらを使うと,ムービークリップが "複数ある場合に限って" 簡略化できます。



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

上で書いた,ムービークリップ内フレーム1の onイベントハンドラメソッド を全て消します。
そして,ドキュメントの編集でメインムービー(_root)の編集に戻ります。

そして,
ステージ上にある,最初に on○○ を書いたムービークリップをコピペでたくさん増やします。
仮にコピペを 9 回して, ムービークリップを 10個 にしたとしておきますか。

ステージ上に 10個あるムービークリップ にそれぞれ違ったンスタンス名を付けます。
インスタンス名は半角英字(アルファベット)から始まっていて全て半角英数字であれば何でも良いのですが,
簡略化する場合,半角英字+半角連番数字 の方が良いです。
この説明の場合は,
「my_mc0」~「my_mc9」までのインスタンス名を付けたとしておきます。

そして,
_root の 「my_mc0」~「my_mc9」までのムービークリップが存在する フレーム のキーフレームに,
次のように書きます。

-------------------------------------
//プログラム
for (i=0; i<=9; i++) {
this["my_mc"+i].onRollOver = function() {
this.gotoAndStop(2);
};
this["my_mc"+i].onPress = function() {
this.gotoAndStop(3);
};
this["my_mc"+i].onRollOut = function() {
this.gotoAndStop(1);
};
this["my_mc"+i].onRelease = this["my_mc"+i].onRollOver;
this["my_mc"+i].onDragOut = this["my_mc"+i].onRollOut;
}
-------------------------------------

こうすることによって,やっと簡略化と呼べるように思います。
「my_mc0」~「my_mc999」まで,1000個のムービークリップがあったとしても,

for (i=0; i<=9; i++) {



for (i=0; i<=999; i++) {

に書き替えれば良いだけです。

インスタンス名の後に付ける番号も 0 からではなく,1 からでもかまいません。
1 からでもかまいませが,
インスタンス名を 1 ではなく 0 から始めている理由は...,
言葉や理屈ではなかなか説明できませんね。
色々やっていると 0 から始める理由が体感でわかってきます。

配列変数などを利用した場合,
その要素番号は 0 から始まるとか。
曜日や月の番号も 0 から始まるとか,
様々なものが 0 番から始まるので,
インスタンス名 や 変数名 のみの連番を 1 から始めると,
そこだけ仲間はずれになって,いろいろ厄介なことになるからです。
(頭の中がゴチャゴチャになって,人間の頭の中の方が簡略化されなくなるためです。)
    • good
    • 0
この回答へのお礼

複数のイベントを書けること、大変参考になりました!
また、for文による多数のMCの操作、今後に生かしていきたいと思います。
ありがとうございました!

お礼日時:2007/06/29 23:19

on○○ するムービークリップが1つの場合,


ほとんど簡略不可能です。
せいぜいここまでです↓。

-------------------------------------
//プログラム
on (rollOver) {
this.gotoAndStop(2);
}
on (press) {
this.gotoAndStop(3);
}
on (release) {
this.gotoAndStop(2);
}
on (rollOut, dragOut) {
this.gotoAndStop(1);
}
-------------------------------------

onイベントハンドラの () 内には複数のイベントパラメータを記入可能です。



on○○ するムービークリップが多数ある場合なら,もっと簡略化できます。
手始めとして,
その,on○○ を書いたムービークリップのスクリプトを全て削除します。
そして,
on○○ を書いたムービークリップをダブルクリックして,
そのムービークリップ内の編集に入り,
フレーム1 に次のように書きます(場合によっては書き加えます)。

-------------------------------------
//プログラム
this.onRollOver = function() {
this.gotoAndStop(2);
};
this.onPress = function() {
this.gotoAndStop(3);
};
this.onRelease = function() {
this.gotoAndStop(2);
};
this.onRollOut = function() {
this.gotoAndStop(1);
};
this.onDragOut = this.onRollOut;
-------------------------------------

これは onイベントハンドラ ではなく,onイベントハンドラメソッドです。
一見,ぜんぜん簡略化されていませんね。
むしろこの回答で最初に書いたスクリプトの方が簡略化されています。

しかし,こちらを使うと,ムービークリップが "複数ある場合に限って" 簡略化できます。



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

上で書いた,ムービークリップ内フレーム1の onイベントハンドラメソッド を全て消します。
そして,ドキュメントの編集でメインムービー(_root)の編集に戻ります。

そして,
ステージ上にある,最初に on○○ を書いたムービークリップをコピペでたくさん増やします。
仮にコピペを 9 回して, ムービークリップを 10個 にしたとしておきますか。

ステージ上に 10個あるムービークリップ にそれぞれ違ったンスタンス名を付けます。
インスタンス名は半角英字(アルファベット)から始まっていて全て半角英数字であれば何でも良いのですが,
簡略化する場合,半角英字+半角連番数字 の方が良いです。
この説明の場合は,
「my_mc0」~「my_mc9」までのインスタンス名を付けたとしておきます。

そして,
_root の 「my_mc0」~「my_mc9」までのムービークリップが存在する フレーム のキーフレームに,
次のように書きます。

-------------------------------------
//プログラム
for (i=0; i<=9; i++) {
this["my_mc"+i].onRollOver = function() {
this.gotoAndStop(2);
};
this["my_mc"+i].onPress = function() {
this.gotoAndStop(3);
};
this["my_mc"+i].onRelease = function() {
this.gotoAndStop(2);
};
this["my_mc"+i].onRollOut = function() {
this.gotoAndStop(1);
};
this["my_mc"+i].onDragOut = this["my_mc"+i].onRollOut;
}
-------------------------------------

こうすれば,やっと簡略化と呼べると思います。
「my_mc0」~「my_mc1000」までのムービークリップがあったとしても,

for (i=0; i<=9; i++) {



for (i=0; i<=999; i++) {

に書き替えれば良いだけです。

インスタンス名の後に付ける番号も 0 からではなく,1 からでもかまいません。
インスタンス名を 1 ではなく 0 から始めている理由は...,
言葉や理屈では言えません。
色々やっていると 0 から始める理由が体感でわかってきます。

配列変数などを利用した場合,
その要素番号は 0 から始まるとか。
曜日や月の番号も 0 から始まるので,
インスタンス名 や 変数名 の連番を 1 から始めると,
そこだけ仲間はずれになって,いろいろ厄介なことになるからです。
(頭の中がゴチャゴチャになって,人間の頭の中の方が簡略化されなくなるためです。)
    • good
    • 0

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