メイン 迷える子羊の部屋【初心者専用】 クリックしたボタン名の取得 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yukidaruma | Åê¹ÆNo.48015 投稿日時: 2011-9-18 23:50 |
新米 居住地: 投稿: 14
使用環境:
WinVista,Flash cs3 |
クリックしたボタン名の取得 何回もすみません。
前に質問して教えていただいたコードに内容を追加したものです。 よろしくお願いします。 10こボタンがあって(btn0?btn9)、ボタンをクリックすると外部swfファイルがロードされ、ボタン名を取得して、ボタン名の中にある数字を取り出し、配列からその数字(letters[数字])のひらがなをテキストフィールドに表示する、というのを作りたいです。 過去ログで調べたものをもとに作りましたが、次のようなエラーメッセージが出ます。 TypeError: Error #1034: 強制型変換に失敗しました。flash.display::SimpleButton@5734539 を flash.display.MovieClip に変換できません。 at _fla::MainTimeline/frame1() どこを直せばよいでしょうか。 ――作ったもの―― var loaderObj:Loader = new Loader(); var letters:Array = ["あ","い","う","え","お","か","き","く","け","こ"]; var swf:MovieClip; for (var i:int=0; i<10; i++) { var btn:MovieClip = this["btn"+i]; btn.addEventListener(MouseEvent.CLICK , set_swf); btn.buttonMode = true; } function set_swf(e:MouseEvent):void { var btn:MovieClip = MovieClip(e.target); var btnNum:int=int(btn.name.substr("btn".length)); this.letter_box.letter.text=letters[btnNum]; var url:URLRequest = new URLRequest("11.swf"); loaderObj.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedSWF); loaderObj.load(url); } function onLoadedSWF(e:Event):void { loaderObj.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadedSWF); trace(e.target); trace(e.target.content); swf = e.target.content; this.fl_box.addChild(swf); swf.stop(); } |
野中文雄 | Åê¹ÆNo.48016 投稿日時: 2011-9-19 0:42 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: クリックしたボタン名の取得 何よりもまず、「問題を切分ける」べきです。原因を探るために「10こボタン」は要らないでしょう。また、「外部swfファイルがロード」された後の問題でないのなら、ロード後の処理もすべて関係ありません。不要なステートメントをすべて削除したうえで、エラーがどこで生じているのか確かめることです。
参考: F-site「トラブルの『捜査手順』」 引用: yukidarumaさんは書きました: |
yukidaruma | Åê¹ÆNo.48017 投稿日時: 2011-9-19 7:44 |
新米 居住地: 投稿: 14
使用環境:
WinVista,Flash cs3 |
Re: クリックしたボタン名の取得 はい、どこの部分でエラーが出るのか分かりました。
下の部分の2行目です。1つのボタン(btn5)に対して var btn:MovieClip = this["btn5"]; のように変えても元のままでもエラーになります。 よろしくお願いします。 そしてなぜ、ここでthisを使うのか意味が分からないです。 (これはフォーラムの過去ログにあったコードです) for (var i:int=0; i<10; i++) { var btn:MovieClip = this["btn"+i]; btn.addEventListener(MouseEvent.CLICK , set_swf); btn.buttonMode = true; } |
とんび | Åê¹ÆNo.48018 投稿日時: 2011-9-19 10:49 |
Bak@Fla大巨匠 居住地: 佐賀県 杵島郡 投稿: 275
使用環境:
MX CS3 :Flash CS6:CS6 .7.5 |
Re: クリックしたボタン名の取得 思うに、下に書いたループのコードは必要ないんじゃないでしょうか?
以下のコードだけでエラーが出るとyukidarumaさん自身が書いてますし。 引用: var btn:MovieClip = this["btn5"]; そうなると、問題はコードよりも、ステージになにをどんなインスタンス名で置いてるかと、どこにコードを書いているかになります。この二つを書かないと、適切な答えは付かないと思います。 そんなわけで、とっちらかってきた感もありますし、仕切り直して情報をまとめ直して、再度質問されることをお勧めします。 どうやら、「ボタン名の取得」は問題とは全然関係ないタイトルのようですし。 なお、質問の最初のコードは長すぎて余計なコードが多すぎるようですので読んでません。
|
野中文雄 | Åê¹ÆNo.48019 投稿日時: 2011-9-19 12:20 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: クリックしたボタン名の取得 「エラーメッセージ」のとおり、「ボタン(btn5)」がボタンシンボル(SimpleButtonクラス)のインスタンスだからではありませんか。
引用: yukidarumaさんは書きました: 配列アクセス演算子[]にthisをつけるかつけないかで、意味はまったく変わります。 引用: yukidarumaさんは書きました: 以前のご質問からも、「参照」という考え方をよく理解されていないようにお見受けします。「他の言語で勉強した」といわれるのがどういう言語かは存じませんが、多くのプログラミング言語で基本的かつ大切な概念です。すでに永井さんもアドバイスされたように、「基本的な参考書を読まれ」基礎固めから始められることが結果として早道に思えます。 参考: [FumioNonaka.com Newsletter: no.092]巻頭言「自分の頭で考える」 |
yukidaruma | Åê¹ÆNo.48020 投稿日時: 2011-9-19 21:57 |
新米 居住地: 投稿: 14
使用環境:
WinVista,Flash cs3 |
Re: クリックしたボタン名の取得 とんびさん、ちょんまげらさん、返答ありがとうございます。
AS3.0の本は今注文中で…すみません。 ボタン名の取得とその番号に合わせたテキスト表示については、コードを下のように少し書き変えたらできました。 var btnNum:int=e.target.name.substr("btn".length); this.letter_box.letter.text=letters[btnNum]; 上記のところが解決したら、下の部分の1行目で次のようなエラーが出ました。2行目だけなら問題ありません。 var btn:MovieClip=this["btn5"]; btn5.addEventListener(MouseEvent.CLICK , set_swf); (本当はbtn.addEventListener(MouseEvent.CLICK , set_swf);としたいが、エラーの原因を探すためにこのようにしてある。) コンパイルエラー 「1046:型が見つからないか、コンパイル時定数ではありません。:btn。」 …というのがfor文をなしにしても10こ出ます。(配置したボタンの数分だと思われます。)this["btn5"]と指定しているのに変です。 しかし不思議なことに… var btnn:MovieClip=this["btn5"]; …変数名を変えただけ… btn5.addEventListener(MouseEvent.CLICK , set_swf); とすると、 出力エラー 「TypeError: Error #1034: 強制型変換に失敗しました。btn@147d7af1 を flash.display.MovieClip に変換できません。 at _fla::MainTimeline/frame1()」 となるのです。 FLASHの方では、配置してあるボタンは10こで、同じシンボルから作っています。(ボタン名 btn0?btn9)、プロパティで、「ActionScroptに書き出し」にチェックを入れると、基本クラスはflash.display.SimpleButtonとなっています。 どこに問題があるのでしょうか。 |
とんび | Åê¹ÆNo.48021 投稿日時: 2011-9-20 1:49 |
Bak@Fla大巨匠 居住地: 佐賀県 杵島郡 投稿: 275
使用環境:
MX CS3 :Flash CS6:CS6 .7.5 |
Re: クリックしたボタン名の取得
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |