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で質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java インスタンス ダウンキャストについて以下の解釈であっているか教えて欲しいです。 サブクラスをスーパー 1 2022/03/27 18:53
- その他(プログラミング・Web制作) パイソン初心者です 4 2022/06/29 06:49
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング、アーキテクチ...
-
VB6.0で、フォームから、別のフ...
-
【VB.NET】別Formのボタンが押...
-
DataTableの件数を取得したい
-
インスタンスとポインタ
-
photoshopで書いた四角の枠の中...
-
テキストボックスの中身をリセ...
-
PythonでSetWindowPosを使うに...
-
UWSCのBTN関数について。
-
App store のマークってイルミ...
-
VBScriptでMsgBoxのYesNoボック...
-
VBAユーザーホームテキストボッ...
-
pythonの画像の貼り付けについて
-
ActionScriptで1ヶ月前の日付や...
-
テキスト入力での文字の判定
-
FLASHで「かるた」を作りたいの...
-
フラッシュで、画像一枚一枚に...
-
今日の残り時間を表示する時計...
-
[Start]を押すと始まるFlas...
-
別のアプリケーションのテキス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング、アーキテクチ...
-
VB6.0で、フォームから、別のフ...
-
【VB.NET】別Formのボタンが押...
-
フォームの生成と破棄
-
VB6.0のHideのバグ?
-
DataTableの件数を取得したい
-
インスタンスとポインタ
-
ダミーウインドウ
-
Python でシャットダウンのコマ...
-
画像を一定時間ごとに切り替え...
-
CreateDialogについて
-
「Me」を「Form1」にするとエラ...
-
ウインドウハンドルとインスタ...
-
Flashの画面をJPEG画像にしてメ...
-
背景画像が拡大縮小しつつ、大...
-
【ActionScript】コンボボック...
-
EXEからDLLへ移植
-
携帯Lite1.1用のプログラム
-
new演算子について教えていただ...
-
getURLでの変数の渡し方
おすすめ情報