• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MouseEventについて教えてください)

MouseEventについて教えてください

このQ&Aのポイント
  • Flash初心者のため、MouseEventについて教えてください。
  • CS5 AS3の環境で、bot1を押しても[object MovieClip]と表示されるだけでターゲットのインスタンス名を割り出せませんでした。
  • MouseEvent.ROLL_OVERではできたが、CLICKでは上手くいかないため、困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

答え自体は簡単に書けるのですが, 少し模索する方向がずれていらっしゃるように思うので その点を書きます。 とりあえずは 次のページを良く読んで理解してみてください。 「[AS3] MovieClipインスタンスとインスタンス名」 http://f-site.org/articles/2008/04/19014939.html   ============================= 今回のご質問に ただ単に回答するだけでしたら 次のスクリプト↓で終わりです。 ------------------ bot1.addEventListener(MouseEvent.CLICK, onClick); function onClick(e:MouseEvent):void { trace(e.target.name); } ------------------ または上記の trace(e.target.name); の部分を trace(e.currentTarget.name); のようにしても良いです。   ============================= しかし...  「そのインスタンス名を取得して何かメリットがありますか?」 というのが 最初に書いた「[AS3] MovieClipインスタンスとインスタンス名」のページに書かれてあることです。 インスタンス名を取得する必要など普通はないと思います。 たとえば  「bot1 をクリックしたときに bot1 を右に 20px 移動させる」 とします。 その場合は次のようにすれば良いだけです。 ------------------ bot1.addEventListener(MouseEvent.CLICK, onClick); function onClick(e:MouseEvent):void { e.target.x += 20; } ------------------ インスタンス名など出てきません。 でも確かにインスタンス名のような名前が必要な場合も出てきますよね。 しかし,その場合も次のようにすれば良いだけです。 ------------------ bot1.addEventListener(MouseEvent.CLICK, onClick); function onClick(e:MouseEvent):void { var my_mc:MovieClip = MovieClip(e.target); my_mc.x +=20; } ------------------ これは  インスタンスを名指しで呼びたいときには  インスタンス名や最初の変数名など関係なく  勝手にインスタンスを参照する変数を作って  その名で呼べば良いでしょう ということです。 最初に書いたページに書かれてある 「変数によりインスタンスを参照するというのが、ActionScript 3.0の基本だといえます。」 の具体的な一例にもなっています。     話が前後しますが bot1.addEventListener(MouseEvent.CLICK, onClick); ここで使っていらっしゃる 「bot1」 も, この時点ではすでに 「インスタンス名」 ではありません。 この 「bot1」 は インスタンス名 と同名で自動命名されたそのインスタンスを参照する 「変数名」 なのです【図】↓。 その他 URL 「Adobe ActionScript 3.0* 変数と定数」 http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fc7.html  

ringo_1
質問者

お礼

BlurFiltan 様 お忙しい中大変親切にご回答頂きまして 本当にありがとうございます。 インスタンスに対して全然違う考え方をしていました。 教えて頂いたページを何度も呼んでちゃんと 理解していきます。 回答だけでなくインスタンスの概念まで 親切に教えて頂きましてありがとうございました。 これからも頑張って勉強していきます。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • AS3のボタンアクションについて

    FlashCS3 ActionScript3.0 ボタンアクションでつまづいています。 http://www.cucinadicasamia.fr/ 上記サイトのように、ボタンをクリックすれば、ダウンの状態を保持、 他のボタンをクリックでダウンの状態を解除。 のようにしたいのですが、上手くいきません。 下記のようにコードを書いたのですが。。。 A_mc.addEventListener(MouseEvent.CLICK,Click); A_mc.addEventListener(MouseEvent.ROLL_OVER,Over); A_mc.addEventListener(MouseEvent.ROLL_OUT,Out); B_mc.addEventListener(MouseEvent.CLICK,Click); B_mc.addEventListener(MouseEvent.ROLL_OVER,Over); B_mc.addEventListener(MouseEvent.ROLL_OUT,Out); function Over(event:MouseEvent):void{ event.target.gotoAndPlay("B"); } function Out(event:MouseEvent):void{ event.target.gotoAndPlay("A"); } function Click(event:MouseEvent):void{ trace("click"); event.target.gotoAndPlay("C"); } A_mc.buttonMode = true; B_mc.buttonMode = true; /////////////////////////////////////////////////////////////////////// function Clickとfunction Overが同時に発生しているので上手くいかないのでしょうか。。。 ご教授お願いいたします。

  • AS3 記述方法

    ボタンが複数存在し、それぞれのボタンの処理をまとめたい時に どうするか考えています。 たとえばステージに3つのボタンインスタンス 「btn1」「btn2」「btn3」があるとします。 クリックすると、それぞれに応じた値を得るために ------------------------------------------------------------- btn1.addEventListener(MouseEvent.CLICK,syori1); function syori1(eventObject:MouseEvent):void{ trace("あんぱん"); } btn2.addEventListener(MouseEvent.CLICK,syori2); function syori2(eventObject:MouseEvent):void{ trace("しょくぱん"); } btn3.addEventListener(MouseEvent.CLICK,syori3); function syori3(eventObject:MouseEvent):void{ trace("カレーぱん"); } ------------------------------------------------------------- としているのですが、 たとえばもしこれが100個のボタンがあれば 100回同じような事を記述しないといけないので あまりよろしくないな・・・と思い、 ------------------------------------------------------------- for(var i=1; i<=3 i++){ this["btn"+i].addEventListener(MouseEvent.CLICK,syori); } function syori(eventObject:MouseEvent):void{ trace("ジャム"); } ------------------------------------------------------------- としたのですが、これではどのボタンをクリックしても"ジャム"がトレースされます。(当然ですが・・・) このような時、まとめて記述するにはどうすればよいでしょうか?

  • actionscript3.0で親階層にあるインスタンスの中のものを操

    actionscript3.0で親階層にあるインスタンスの中のものを操作したいのですが、うまくいきません。 具体的には、ボタンをクリックすると、ひとつ上の階層にある「aa_mc」の100フレームへgotoAndPlayするとしたいのですが、 スクリプトは以下の通りです。 //////////////////////////////////////////////////////// btn_mc.addEventListener(MouseEvent.CLICK, onClick); function onClick (eventObject:MouseEvent) :void { MovieClip(parent).aa_mc.gotoAndPlay(100); } //////////////////////////////////////////////////////// どなたかご教授お願いいたします。

  • for文を使ったボタン

    for文を使ったボタン ボタンが2つあり、そのボタンをロールオーバー、ロールアウトでそれぞれ違うmcを動かしたいのですが、うまくいきません。ボタンを「maru1、maru2」として動かしたいmcを「btn1、btn2」とインスタンス名をつけて以下のスクリプトを書きました。 maru1.addEventListener(MouseEvent.ROLL_OVER,onMouse1); maru1.addEventListener(MouseEvent.ROLL_OUT,outMouse1); maru1.buttonMode = true; maru2.addEventListener(MouseEvent.ROLL_OVER,onMouse2); maru2.addEventListener(MouseEvent.ROLL_OUT,outMouse2); maru2.buttonMode = true; function onMouse1(e:MouseEvent):void{ mc_tween = new Tween(btn1, "scaleX", Elastic.easeOut, 0.7, 1, 1, true); mc_tween.start(); } function outMouse1(e:MouseEvent):void{ mc_tween = new Tween(btn1, "scaleX", Elastic.easeOut, 1, 0.7, 1, true); mc_tween.start(); } function onMouse2(e:MouseEvent):void{ mc_tween = new Tween(btn2, "scaleX", Elastic.easeOut, 0.7, 1, 1, true); mc_tween.start(); } function outMouse2(e:MouseEvent):void{ mc_tween = new Tween(btn2, "scaleX", Elastic.easeOut, 1, 0.7, 1, true); mc_tween.start(); } これでも動くのですが、ボタンが沢山あった場合にfor文を使ってできないかと考え、ttp://www.oro.co.jp/web/creator/flash/actionscript/soft-button.htmlを参考に var mc_tween:Tween; //イベント登録 for(var i:int = 1; i < 3; i++){ this["maru"+i].addEventListener(MouseEvent.ROLL_OVER, rollOverEvent); this["maru"+i].addEventListener(MouseEvent.ROLL_OUT, rollOutEvent); this["maru"+i].buttonMode = true; } function rollOverEvent(event:Event):void{ var btn:MovieClip = event.target as MovieClip; mc_tween = new Tween(btn, "scaleX", Elastic.easeOut, btn.scaleX, 1.5, 1, true); mc_tween = new Tween(btn, "scaleY", Elastic.easeOut, btn.scaleY, 1.5, 1, true); addChildAt(btn, 5); } function rollOutEvent(event:Event):void{ var btn:MovieClip = event.target as MovieClip; mc_tween = new Tween(btn, "scaleX", Elastic.easeOut, btn.scaleX, 1, 1, true); mc_tween = new Tween(btn, "scaleY", Elastic.easeOut, btn.scaleY, 1, 1, true); } と書いたのですが、上手く行きません。<var btn:MovieClip = event.target as MovieClip;>の部分でどのように「btn1、btn2」を参照したらいいのでしょうか。 作業環境はmacOSX flashCS5 actionscript3です。よろしくお願い致します。

    • ベストアンサー
    • Flash
  • AS3.0で、複数のボタンをaddChildを使って配置しマウスイベン

    AS3.0で、複数のボタンをaddChildを使って配置しマウスイベントをfor文でまとめて設定する場合で悩んでおります、現在の以下のようにコーディングしているのですが、 //ボタン数 const Btns:uint=3; //ボタン配置 for (var i:uint=1; i<Btns+1; i++) { var BtnName:String="btn0"+i; ->ボタンにつけたクラスネーム var BtnClass:Class=getDefinitionByName(BtnName) as Class; var btnMC:MovieClip = new BtnClass(); loadmc02.addChild(btnMC); (loadmc2はボタンを配置するMC) btnMC.buttonMode=true; btnMC.x=10*i+140*(i-1); btnMC.y=340; if (i==1) { btnMC.addEventListener(MouseEvent.CLICK, BtnOnClick1); btnMC.addEventListener(MouseEvent.ROLL_OVER, BtnRollOver1); btnMC.addEventListener(MouseEvent.ROLL_OUT, BtnRollOut1); } else if (i==2) { btnMC.addEventListener(MouseEvent.CLICK, BtnOnClick2); btnMC.addEventListener(MouseEvent.ROLL_OVER, BtnRollOver2); btnMC.addEventListener(MouseEvent.ROLL_OUT, BtnRollOut2); } else if (i==3) { btnMC.addEventListener(MouseEvent.CLICK, BtnOnClick3); btnMC.addEventListener(MouseEvent.ROLL_OVER, BtnRollOver3); btnMC.addEventListener(MouseEvent.ROLL_OUT, BtnRollOut3); } } です。BtnOnClick1~3は異なるURLでBtnRollOver1~3、BtnRollOut1~3は function Over(hikisu)、function Out(hikisu)という関数を作って、 function BtnRollOver1(eventObject:MouseEvent):void { Over(1); } function BtnRollOut1(eventObject:MouseEvent):void { Out(1); }てな感じで動かしたい。 2.0とかってが違うので悩んでいます。効率のよいコーディングの仕方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript 3.0 D&Dの実装

    ステージ上に、インスタンス20個配置し (addChildは使わずに、普通に最初から置きます。  インスタンス名は mc1 ~ mc20)  それぞれをドラッグアンドドロップで自由に動かしたいです。 以下のようにプログラムを書いたのですが いざドラッグしようとすると 「TypeError: Error #1006: value は関数ではありません at MethodInfo-1()」 っとエラーが出てしまいました。 っと出てしまいました。 一体何が原因でしょうか? また、解決方法がありましたら是非ともよろしくお願いします。 addEventListener(MouseEvent.MOUSE_OVER,getname); function getname(e:MouseEvent) {    var str= e.target.name; trace(str); //マウスカーソルを乗せたムービークリップのインスタンス名が出ます。 addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); function onMouseDown(e:MouseEvent) { str.startDrag(); } addEventListener(MouseEvent.MOUSE_UP, onMouseUp); function onMouseUp(e:MouseEvent) { str.stopDrag(); } }

    • ベストアンサー
    • Flash
  • AS3のコードをシンプルに

    AS3のコードについてご教授お願いします。 下記のようなコードがあるとします。 btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); function aClick(e:MouseEvent):void { this.gotoAndPlay("A"); // trace("Aclick"); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); btnA_mc.removeEventListener(MouseEvent.CLICK,aClick); } function bClick(e:MouseEvent):void { this.gotoAndPlay("B"); // trace("Bclick"); btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); btnB_mc.removeEventListener(MouseEvent.CLICK,bClick); } function cClick(e:MouseEvent):void { this.gotoAndPlay("C"); // trace("Cclick"); btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.removeEventListener(MouseEvent.CLICK,cClick); } btnA_mc.buttonMode = true; btnB_mc.buttonMode = true; btnC_mc.buttonMode = true; この中の、 btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.removeEventListener(MouseEvent.CLICK,cClick); のような、重複する部分を、配列か何かでまとめたいのですが、いまいち方法が分かりません。 ボタンAをクリックで、ボタンAは効かなくなる。ボタンBorCをクリックでボタンAが復活みたいな感じです。 宜しくお願いします。 flashCS3 ASはver3.0でお願いします。

    • ベストアンサー
    • Flash
  • as3 e.currentTargetの階層へのアクセス

    as3 e.currentTargetの階層へのアクセス 例えば、 mc.addEventListener(MouseEvent.CLICK, test); function test(e:Event):void { trace("e.currentTarget.x"); } これで、x座標は表示できると思うのですが、 親mc、子mcChild←のような階層のムービークリップの場合、 mc.addEventListener(MouseEvent.CLICK, test);(mc.mcChildではなく) でリスナーを登録した状態で、 関数側でmcChildのx座標を操作することはできるのでしょうか? イメージとしては、 mc.addEventListener(MouseEvent.CLICK, test); function test(e:Event):void { trace("e.currentTarget[ここに子へのパス].x"); } ご教授お願いいたします。

    • ベストアンサー
    • Flash
  • actionscript3.0 内容をまとめる

    actionscript3.0を使ってゲームを作成しています。 addchildしたインスタンスにmouseClickのイベントをつけているのですが 内容がほとんど同じでできれば省略して記入したいのですがやりかたがよくわかりません。 内容はこんな感じです for (var i:int=0; i<9; i++) { ka_do.name = "ka_do" + i;//連番名にする addChild (ka_do); } function aaa ():void { getChildByName("ka_do0").addEventListener (MouseEvent.CLICK, K_m3); getChildByName("ka_do1").addEventListener (MouseEvent.CLICK, K_m2a); getChildByName("ka_do2").addEventListener (MouseEvent.CLICK, K_m2b); getChildByName("ka_do3").addEventListener (MouseEvent.CLICK, K_m1a); } function K_m3 (e:MouseEvent):void {//マイナス3 ka[0] = 1; } function K_m2a (e:MouseEvent):void {//マイナス2 ka[1] = 1; } function K_m2b (e:MouseEvent):void {//マイナス2 ka[2] = 1; } function K_m1a (e:MouseEvent):void {//マイナス1 ka[3] = 1; } function K_m1b (e:MouseEvent):void {//マイナス1 ka[4] = 1; } こんな形でka[]の中が連番になっているだけです。 解答お待ちしています。

    • ベストアンサー
    • Flash
  • マウスクリックで値を送る(AS3.0)

    Flash Pro CS5 AS3.0 で記述しています。 ステージにtest_txt1とtest_txt2を配置し, クリックされたらどちらも同じ関数(testFunc)を呼び出すようになっています。 コードは stop(); test_txt1.addEventListener(MouseEvent.CLICK, testFunc); test_txt2.addEventListener(MouseEvent.CLICK, testFunc); function testFunc(evt:MouseEvent):void{ trace("呼び出された"); } ここで、どちらのテキストをクリックして呼び出されたのかを判断できるようにしたいのですが どのように記述して関数に値を渡すのでしょうか? 試しに以下のように記述したのですができませんでした。 test_txt1.addEventListener(MouseEvent.CLICK, testFunc, 1); test_txt2.addEventListener(MouseEvent.CLICK, testFunc, 2); function testFunc(evt:MouseEvent, val:int):void{ trace("val"); } よろしくお願いいたします。

    • ベストアンサー
    • Flash