アクションスクリプト3.0でのインスタンス参照方法と非表示方法

このQ&Aのポイント
  • アクションスクリプト3.0を使用して、ムービークリップのインスタンスを参照する方法と、マウスオーバーでの表示とマウスアウトでの非表示の方法について説明します。
  • マウスオーバーでムービークリップを表示するプログラムを作成しましたが、マウスアウトでの非表示を実現するためには、未定義のプロパティエラーが発生しています。
  • 解決策として、mout関数内でxyzを定義し、mover関数内で定義したxyzと同じインスタンスを使用することで、期待する動作を実現することができます。
回答を見る
  • ベストアンサー

アクションスクリプト3.0での存在している予定のインスタンスの参照方法

abcというムービークリップにマウスオーバーするとxyz(クラス名はaru)という ムービークリップを表示するプログラム(アクションスクリプト3.0)を作りました。 abc.addEventListener(MouseEvent.MOUSE_OVER , mover); function mover(e:MouseEvent):void{ var xyz:aru = new aru(); xyz.x = 380; xyz.y = 100; addChild(xyz); } ここまでは問題なく機能しました。 ここで、abcのマウスオーバーがなくなった状態(つまりマウスアウト) になったら、xyzを非表示にしたいと思い以下のようにしました。 abc.addEventListener(MouseEvent.MOUSE_OVER , mover); abc.addEventListener(MouseEvent.MOUSE_OUT , mout); function mover(e:MouseEvent):void{ var xyz:aru = new aru(); xyz.x = 380; xyz.y = 100; addChild(xyz); } function mout(e:MouseEvent):void{ removeChild(xyz); } こうすると、removeChild(xyz)が未定義のプロパティxyzへのアクセスです。となりエラーとなってしまいます。 mout関数内でxyzが定義されていないからでるエラーなのでしょうか? もしそうだとすると、期待動作を実現するにはどのようにプログラムすればよろしいのでしょうか? 以上何とぞよろしくお願いいたします!

noname#120036
noname#120036
  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

変数 スコープ 等で検索してください. 関数の中でvar宣言をすると、その関数の中だけで 保持される変数になります. abc.addEventListener(MouseEvent.MOUSE_OVER , mover); abc.addEventListener(MouseEvent.MOUSE_OUT , mout); //関数の外で宣言 var xyz:aru = new aru(); function mover(e:MouseEvent):void{ xyz.x = 380; xyz.y = 100; addChild(xyz); } function mout(e:MouseEvent):void{ removeChild(xyz); }

noname#120036
質問者

お礼

なるほど!! スコープという概念はわかっていたつもりだったのですが、全くわかっていませんでしたね…。 素早くご回答して頂き本当にありがとうございます! screenstar様に心より感謝いたします。 本当にありがとうございました!!

関連するQ&A

  • マウスオーバー/マウスアウトで反応するボタン

    はじめまして、Flash初心者です。 かなり基本的な質問で申し訳ないのですが、ご教授のほど、よろしくお願いします。 マウスオーバーで、モーションが再生され、 マウスアウトで、別のモーションが再生され(オーバーの逆回転のようなもの) ボタンをムービークリップで作成しているのですが、うまくいかなくて困っています。 ◆レイヤー2 //マウスオーバー butt.addEventListener( MouseEvent.MOUSE_OVER , fnon ); function fnon ( e:MouseEvent ):void{ gotoAndPlay(2); } //マウスアウト butt.addEventListener( MouseEvent.MOUSE_OUT , fnout ); function fnout ( e:MouseEvent ):void{ gotoAndPlay(11); } ◆レイヤー1 1 stop(); 10 stop(); 20 gotoAndPlay(1); (おそらくこれよりもいい方法があると思うのですが・・・) ASを入れる位置がおかしいのでしょうか・・・ よろしくお願いします。

  • アクションスクリプト3.0 MOUSE_OVER

    お世話になっております。 3枚の画像がMouse_overされた際に、別の画像に切り替わるアクションスクリプトを考えております。画像のインスタンス名で判定し、共通のファンクションで管理できればと思っております。 現時点では、参照値に代入できません というエラーがでています。インスタンス名と比較させるところで止まっているのはわかりますが、これをどのように解決したらよいのでしょうか。 googleでアクションスクリプト3.0 画像 切り替えで検索しましたが、いずれも、私がやりたいこととは違うものでした。一応、mouse_overの使い方では参考にしました。 ステージ上に二つのレイヤーを作成し、上にマウスオーバー状態、下にノーマルの状態の画像を配置しました。 どうか、ご教授いただけますでしょうか。 よろしくお願い致します。 現在のスクリプトは以下のような感じです。 public function init() {  aaa_over.visible = "false";  bbb_over.visible = "false";  ccc_over.visible = "false";  aaa.addEventListener(MouseEvent.MOUSE_OVER, overMouse);  bbb.addEventListener(MouseEvent.MOUSE_OVER, overMouse);  ccc.addEventListener(MouseEvent.MOUSE_OVER, overMouse); } private function overMouse(MC:MouseEvent):void{  var pointMc:MovieClip = MovieClip(MC.target);  var pic_over = pointMc.name;  pointMc.visible = "false";  pic_over+"_over".visible = "ture";  pointMc.addEventListener(MouseEvent.MOUSE_OUT, outMouse); } private function outMouse(mc:MouseEvent):void{  var pointMc:MovieClip = MovieClip(mc.target);  var pic_over = pointMc.name;  pointMc.visible = "ture";  pic_over+"_over".visible = "false"; }

    • ベストアンサー
    • 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
  • マウスアウトで非表示にする

    シーン1に、mc(ムービークリップ)とcomment1(ムービークリップ)を配置 mcにマウスオーバーするとcomment1が表示される。 mcよりマウスアウトするとcommen1が非表示になる。 という感じにしたいのですが、マウスアウトしても非表示に出来ないで困っています。 //----------------------------------- MovieClip(root).comment1.visible = false; var pointX:Number=70; var pointY:Number=50; mc.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); function fl_MouseOver(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunc); function mouseMoveFunc(e:MouseEvent):void { MovieClip(root).comment1.visible = true; MovieClip(root).comment1.x=stage.mouseX+pointX; MovieClip(root).comment1.y=stage.mouseY+pointY; } } mc.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOver2); function fl_MouseOver2(event:MouseEvent):void { mc.removeEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); MovieClip(root).comment1.visible = false; } //-----------------------------------

    • ベストアンサー
    • Flash
  • [return]の役割について

    バージョン : ActionScript 3.0 よく参考書籍等では、[returnは関数内の値を戻します]とありますが… stage.addEventListener(MouseEvent.MOUSE_OVER , buttonTrue); function buttonTrue(e :MouseEvent) :void {  e.target.buttonMode = true; } 例えば上記の処理は、イベントディスパッチャーを介して[mover]関数の値を返していると思うのですが…? まったく[return]の真価がわかりません…初歩的な質問で申し訳ありませんが、何方か教えて頂けませんでしょうか?

    • ベストアンサー
    • Flash
  • actionscript3.0について教えてください。

    actionscript3.0について教えてください。 Flash CS4で、マウスオーバーすると画像が表示するものを制作しました。 (全レイヤー、1フレーム目のみで制作していました) そして最近その以前制作したものの直前に別のムービーを入れることになり、 画像のように1フレーム目から4フレーム目まであけました。 そしてもともとあったフレームをすべて5フレーム目に移動しました。 すると、エラーが出るようになりました。 5フレーム目に移動するとエラーが出るようになってしまったので、 試しに2フレーム目、3フレーム目など試しましたが同じくエラーが出ました。 エラーの内容は TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at test_fla::MainTimeline/frame5() です。 下記のスクリプトを上から二つ目のレイヤーに記述しています。 一番上のレイヤーには、stop();と記述しています。 超初心者のため説明不十分かもしれませんが、宜しくお願いいたします。 /*ボタン1 */ nav1txt_mc.visible = false; nav1_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover); function onMouseover(e:MouseEvent):void{ nav1txt_mc.visible = true; nav1txt_mc.gotoAndPlay("nav1txt_mc"); } nav1_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay); function nondisplay(e:MouseEvent):void{ nav1txt_mc.visible = false; } /*ボタン2*/ nav2txt_mc.visible = false; nav2_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover2); function onMouseover2(e:MouseEvent):void{ nav2txt_mc.visible = true; nav2txt_mc.gotoAndPlay("nav2txt_mc"); } nav2_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay2); function nondisplay2(e:MouseEvent):void{ nav2txt_mc.visible = false; } /*ボタン3*/ nav3txt_mc.visible = false; nav3_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover3); function onMouseover3(e:MouseEvent):void{ nav3txt_mc.visible = true; nav3txt_mc.gotoAndPlay("nav3txt_mc"); } nav3_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay3); function nondisplay3(e:MouseEvent):void{ nav3txt_mc.visible = false; } /*ボタン4*/ nav4txt_mc.visible = false; nav4_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover4); function onMouseover4(e:MouseEvent):void{ nav4txt_mc.visible = true; nav4txt_mc.gotoAndPlay("nav4txt_mc"); } nav4_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay4); function nondisplay4(e:MouseEvent):void{ nav4txt_mc.visible = false; } 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • ActionScript3.0の修正に関して

    下記スクリプトは、A_btnをマウスオーバーすると、mcを表示し、 A_btnをマウスアウトすると、mcを非表示にするというスクリプトです。 これのマウスオーバー、マウスアウトを クリックしたら表示し、もう一度クリックしたら非表示にするというものに 変更したいのですが、 単にMouseEvent.CLICKにすると動作しなかったので どなたか教えていただけないでしょうか? よろしくお願いします。 ---------------------- 環境 action script3.0 Mac OSX Flash CS4 ---------------------- var mc:Fukidashi = new Fukidashi(); A_btn.addEventListener(MouseEvent.MOUSE_OVER,xMouseOver); function xMouseOver(evt){ mc.alpha = 0; addChild(mc); mc.x = 0; mc.y = 0; mc.addEventListener(Event.ENTER_FRAME,imgAlpha); function imgAlpha(event:Event){ mc.alpha += 0.05; if (mc.alpha > 1){ mc.removeEventListener(Event.ENTER_FRAME,imgAlpha); } } } A_btn.addEventListener(MouseEvent.MOUSE_OUT,xMouseOut); function xMouseOut(evt){ removeChild(mc); mc.alpha = 0; }

    • ベストアンサー
    • Flash
  • マウスでドラッグして絵を描くSWFを作っています

    マウスでドラッグして絵を描くSWFを作っています ムービークリップ"masu"を置き、 下のスクリプトで、マウスのボタンを押してしてそのままマウスを動かすと動きに沿って線は引かれ、hの値も正しくトレースされるのですが、ボタンをあげても TypeError: Error #1034: 強制型変換に失敗しました。flash.events::MouseEvent@2ac45ea1 を fl.motion.MotionEvent に変換できません。 というエラーが出力され、 function DEL(eventObject:MotionEvent):void{ removeEventListener(MouseEvent.MOUSE_MOVE,LINE); } が動きません。なぜでしょうか? また、AS1は少しはわかりますがAS3は初心者ですので、もっとよいスクリプトなどありましたら挙げていただけるとうれしいです import fl.motion.MotionEvent; var h = 1; this.masu.addEventListener(MouseEvent.MOUSE_DOWN,MOVE); this.masu.addEventListener(MouseEvent.MOUSE_UP,DEL); function MOVE(eventObject:MouseEvent):void{ this.masu.graphics.moveTo(mouseX,mouseY); this.masu.addEventListener(MouseEvent.MOUSE_MOVE,LINE); } function LINE(eventObject:MouseEvent):void{ h++; trace(h); this.masu.graphics.lineStyle(3,0x000000); this.masu.graphics.lineTo(mouseX,mouseY); } function DEL(eventObject:MotionEvent):void{ removeEventListener(MouseEvent.MOUSE_MOVE,LINE); }

    • ベストアンサー
    • 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
  • 関数を停止するには。。。。

    function moveMC(e:Event):void { if (mc.x<550) { if (mc.x<cnt*50) { mc.x+=30; mm.x+=30; } moveMCを止めたいので b1.addEventListener(MouseEvent.MOUSE_OVER, mcstop); function mcstop(event:MouseEvent):void { moveMC.stop(); } としたら1061エラーでstopが定義されていないと出ました。 どう定義させたらいいのでしょうか??

    • ベストアンサー
    • Flash