No.2ベストアンサー
- 回答日時:
#1です。
たびたび失礼します。
> (アクションスクリプトで制御しようと思ったら
> ボタンインスタンスはあまり使わないのかな?)
この点,
説明すると色々な事例を出さざるを得なくなって,
とてもここでは回答しきれないのですが,
ボタンシンボルのインスタンスに
on (release) {}
を使うから問題なわけで,
例えば,
aaa0 という言うインスタンス名のボタンと,
aaa1 という言うインスタンス名のボタンと,
aaa2 という言うインスタンス名のボタンがあった場合,
いちいち,
on (release) {
trace("name:"+_name);
}
を書くのは面倒なわけです。
もし,このスクリプトの示す _name がボタンに使えたらの場合ですよ。
実際には使えないので,書いても意味がないですが。
とにかく,使えたらの場合,書くのは面倒ですし,
また,たくさんあった場合,間違える可能性もあるのです。
だから,そういう場合は,
フレームに,
------------------------------------
for (var i = 0; i<=2; i++) {
_root["aaa"+i].onRelease = function() {
trace("name:"+this._name);
};
}
-------------------------------------
と書くのです。
すると仮に,aaa1000 まで,1001個のボタンが _root にあったとしても,
------------------------------------
for (var i = 0; i<=1000; i++) {
_root["aaa"+i].onRelease = function() {
trace("name:"+this._name);
};
}
-------------------------------------
と書くだけで良くなるのです。
ただし,そのフレームには aaa0 ~ aaa1000 までのボタンが同時に存在している必要がありますけどね。
というわけで,
trace("name:"+this._name);
を使うという前提においては,
「アクションスクリプトで制御しようと思ったら
ボタンインスタンスはあまり使わない」
ということにはなりません。
あくまでもこれはこの場合の話です。
場合によって変わります。
=======================
場合によっては変わりますが,
実際問題として,
「アクションスクリプトで制御しようと思ったら
ボタンインスタンスはあまり使わない」
という現象は進んでいます。
特に,
// ライブラリからムービークリップを呼び出す
Movieclip..attachMovie();
// ムービークリップの複製
Movieclip..duplicateMovieClip();
// ムービークリップの深度を変える
Movieclip..swapDepths();
というムービークリップクラスのメソッドは,ボタンには使えません。
その他色々,ボタンには制約があるので,
ボタンはムービークリップで自作するという向きもあります。
ムービークリップのボタン化
http://homepage3.nifty.com/ginga-b/MX/btnmc.html
Flash に置いては,ムービークリップがインスタンスの長ですね。
グラフィックシンボルのインスタンスとしても使えますし,
ボタンシンボルのインスタンスとしても使えます。
結局,ムービークリップさえあれば,グラフィックシンボルもボタンシンボルも不要だということになります。
これで,
だいたい,#1のお礼に書いてくださっていることの回答にはなると思います。
以下は,単なる私的な蘊蓄ですから,
適当に無視してやってください。
===========================
なぜ,このように,
ムービークリップさえあれば何でもできるのに,
ボタンシンボルやグラフィックシンボルがあるのかというと,
先にボタンシンボルやグラフィックシンボルが誕生したからです。
一度,世に出したものは,
よっぽどでないかぎりアップグレードで削除できません。
今まであったものがなくなったり,今までより使い勝手が悪くなると,クレームが殺到します
私は Macromedia とは無縁ですが,全然別会社で別のソフトの開発にたずさわっているものなのでこの点はよくわかります。
とにかく,今ある機能を充実させるのは良いのですが,
今ある機能を削除したり,簡素化するとクレームの嵐がおそって来ます。
Flash の簡易的な歴史は,
私がココにまとめています↓。
「質問:flashの解説したHpをおせえてください」
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1942095
↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/kotaeru.php3?q=1942095
…と思って見直しましたが,
その点についてはまとめていませんね,すみません。
まとめていませんが,
ムービークリップの誕生は Flash 3 (1998年)なのです。
グラフィックシンボルとボタンシンボルは Flash 2 より前から存在していて,
Flash 3 になって初めてムービークリップシンボルが誕生したのです。
誕生の理由は名前が示していますが,
Flashというムービーの中に,さらにムービーを入れるためです。
この Flash 3 でムービークリップが登場すると同時に,「階層」という概念が登場しました。
だから,
グラフィックシンボルのインスタンスにも,ボタンシンボルのインスタンスにも階層がないのです。
もし,ムービークリップが先に誕生していて,
その後に構造を自作しなくて済むボタンが誕生したのでしたら,
きっとボタンにも階層があったと思いますから,
on (release) {
trace("name:"+_name);
}
は使えていたと思います。
これが使えない原因は,Flash の歴史にあるのです。
しかし,ボタンは使い勝手が良いですね。
勝手に アップ,オーバー ,ダウン,ヒット というフレームが用意されていますし,
階層を持たないので,
---------------------------
on (release) {
gotoAndPlay(10);
}
---------------------------
みたいなので,階層を何にも考えなくても,
自分の存在する階層のタイムラインの再生ヘッドを フレーム10 に進めることができます。
個人的には,
ボタンシンボルのインスタンスは制約があったり応用が効きませんが,
簡単ですごく好きなシンボルです!
と自分で書いていて何ですが,
こんな「ボタンは簡単ですごく好きなシンボルです!」というような
sassakunみたいなヤツがたくさんいるから,
on (release) {
trace("name:"+_name);
}
が使えないわけです~ぅ。
というわけでした。
sassakunさん度々ありがとうございます。
ボタンインスタンスについてFlashの歴史との関連、すごく勉強になりました。
階層を持たないメリットも理解できました。
Flashもやはり機能が充実していって値段が上がっているんですねー。(^_^;)
ありがとうございました。
No.1
- 回答日時:
書かれているスクリプト
on (release) {
trace("name:"+_name);
}
のターゲットを略さずに書くと
on (release) {
trace("name:"+this._name);
}
になります。
この this の示す物はボタンではなくボタンの存在する階層になるため,
trace の結果は 「name:」 だけになってしまします。
階層については次のページを参考にしてみたください。
WEBMOV06 ≫ 第7回:ムービーの階層化
http://yoppa.org/webmov06.php?itemid=327
ターゲットパス
http://homepage3.nifty.com/ginga-b/MX/targetpath …
簡単に言うと,
ムービークリップは1つの階層ですが(フォルダのような物),
ボタンは階層を持ちません(ファイルのような物)。
this._name に関しては,
次のページを参考にしてください。
Flash ActionScript入門ノート
「3.1 シンタックスの基本要素」
http://oshige.com/flash/note/archives/3_actionsc …
--- 下から10%くらいの行から引用 ---
> ■this(ボタンのインスタンスの場合)
> ボタンのインスタンスに設定したオブジェクトアクション
> については注意が必要です。
> ボタンに設定してある onハンドラ の中で
> this が指すものはボタンのインスタンス自身ではありません。
> thisはボタンが置いてあるインスタンスを指します。
> ~中略~
> ボタンもインスタンス名をつければ
> フレームアクションからイベントハンドラを設定できます。
> この中で指すthisはボタンのインスタンスになります。
> たとえば、ボタンのインスタンス名が my_btn であるとき、
> ボタンが置いてあるタイムラインのフレームアクションに
> 次のスクリプトを書きます。
> この場合にはthisが指すものはボタンのインスタンスなので、
> ボタンをクリックするとボタン自身が回転します。
>
> //ボタンをクリックするとボタン自身が回転する
> my_btn.onPress = function(){
> this._rotation += 5;
> }
というわけで,
書かれているスクリプトの場合は,
ボタンのインスタンス名が aaa だとすると,
_root の フレームに,
--------------------------
aaa.onRelease = function() {
trace("name:"+this._name);
};
--------------------------
と書けば解決します。
って,全然解決してないような…,
これでは本末転倒していますね。
ボタンのインスタンス名が aaa と わかっているから,
aaa.onRelease = function() {}
が書けるわけで,
ボタンのインスタンス名が aaa だとわかっていないから,
trace("name:"+_name);
をしたいのに……。
ですね。
困った物だ。
別案では,こういう使い方なら使えるます↓。
Flashドキュメンテーション
http://livedocs.macromedia.com/flash/8_jp/main/0 …
これに従うとこんな感じ↓?
--------------------------
on (release) {
for (i in this) {
if (this[i] instanceof Button) {
trace("name:"+this[i]._name);
}
}
}
--------------------------
ボタンが1つであれば,大丈夫です。
って,やっぱりぜんぜん大丈夫ではありませんね。
困った物ですが,そういうものだと思って諦めてください。
どうしても
on (release) {
trace("name:"+_name);
}
を使いたい場合は,
ご質問で書かれているようにムービークリップに使うようにしてください。
うわー(・o・) こんな初心者にこんなにも一生懸命回答頂きありがとうございます!
フォルダとファイルの解釈がすごくわかりやすかったです。勉強になりました。
aaa.onRelease = function() {
trace("name:"+this._name);
};
これについてはおっしゃる通りです。
プログラム中に「aaa」というインスタンス名を利用したくないんですよ。(^_^;)
ムービークリップを利用するしかないのなら今後そのようにします。
(アクションスクリプトで制御しようと思ったらボタンインスタンスはあまり使わないのかな?)
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VB.NET】別Formのボタンが押...
-
VB6.0のHideのバグ?
-
ActionScript2.0で画面スクロール
-
別のアプリケーションのテキス...
-
photoshopで書いた四角の枠の中...
-
VB6.0 でメニューを作りたいん...
-
テキストボックスにセルの値を...
-
ボタン自身の画像を変える方法
-
sendAndLoadで
-
C言語でのマウスを移動とマウス...
-
SO-01B(2.3.3)のroot化について
-
マスクをとるとオーバーフロー...
-
テキストボックスの中身をリセ...
-
duplicateMovieClip
-
こういうことをしたいのですが...
-
python ボタンを押すと複数の関...
-
VBScriptでMsgBoxのYesNoボック...
-
MovableTypeの導入について
-
マウス自体の移動量の取得
-
FLASHナビボタンで、アクション...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB.NET】別Formのボタンが押...
-
VB6.0で、フォームから、別のフ...
-
インスタンスとポインタ
-
DataTableの件数を取得したい
-
カーソルを手に変更
-
「Me」を「Form1」にするとエラ...
-
CreateDialogについて
-
SharedObjectについて
-
オブジェクトの重なり順の変更
-
プログラミング、アーキテクチ...
-
VB6.0のHideのバグ?
-
先読み画像を後で生成するMCの...
-
ボタンインスタンスの_nameプロ...
-
クラスのプロパティ一覧を列挙...
-
1000個のMCにa1~a1000のイン...
-
BitmapをIDで指定したい
-
ActionScript3.0で画面を揺らす...
-
Python でシャットダウンのコマ...
-
Win32 API ウィンドウ
-
MouseEventについて教えてください
おすすめ情報