トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     クリックしたボタン名の取得
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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さんは書きました:
10こボタンがあって(btn0?btn9)、ボタンをクリックすると外部swfファイルがロードされ、ボタン名を取得して、ボタン名の中にある数字を取り出し、配列からその数字(letters[数字])のひらがなをテキストフィールドに表示する、というのを作りたいです。
過去ログで調べたものをもとに作りましたが、次のようなエラーメッセージが出ます。

TypeError: Error #1034: 強制型変換に失敗しました。flash.display::SimpleButton@5734539 を flash.display.MovieClip に変換できません。
at _fla::MainTimeline/frame1()

どこを直せばよいでしょうか。


----------------
 

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さんは書きました:
過去ログで調べたものをもとに作りましたが、次のようなエラーメッセージが出ます。

TypeError: Error #1034: 強制型変換に失敗しました。flash.display::SimpleButton@5734539 を flash.display.MovieClip に変換できません。
at _fla::MainTimeline/frame1()

配列アクセス演算子[]thisをつけるかつけないかで、意味はまったく変わります。
引用:
yukidarumaさんは書きました:
下の部分の2行目です。1つのボタン(btn5)に対して
var btn:MovieClip = this["btn5"];

のように変えても元のままでもエラーになります。
よろしくお願いします。
そしてなぜ、ここでthisを使うのか意味が分からないです。
(これはフォーラムの過去ログにあったコードです)

以前のご質問からも、「参照」という考え方をよく理解されていないようにお見受けします。「他の言語で勉強した」といわれるのがどういう言語かは存じませんが、多くのプログラミング言語で基本的かつ大切な概念です。すでに永井さんもアドバイスされたように、「基本的な参考書を読まれ」基礎固めから始められることが結果として早道に思えます。

参考: [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: クリックしたボタン名の取得
 野中さんは「 ちょんまげら 」なのに、私は「 Bak@Fla巨匠 」じゃないというチョイスに多少、脳内小人さん会議が異議申し立てをしております。 あれ、称号であって名前じゃないですからね。

 ま、それはともかく。

 とりあえず、最初の質問(ボタン名の取得)が解決したら、別の質問はまたスレッドを立ててやった方がいいと思います。
 同じスレッドでいろんな質問されると読む方が混乱しますし、経緯を追うのが面倒くさいので答えてくれる人が激減します。


----------------
鳶嶋工房

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops