• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActionScript3.0 初心者です)

ActionScript3.0初心者のためのロールオーバー・アウトのスクリプト

このQ&Aのポイント
  • ActionScript3.0初心者がムービークリップのロールオーバー・アウトを制御するためのスクリプトです。
  • スクリプト内の縮尺の間隔が問題となる場合についての解決策を教えてください。
  • ハッシュタグ: #ActionScript3.0 #初心者 #ロールオーバー #アウト #スクリプト

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

  • ベストアンサー
  • salonpath
  • ベストアンサー率48% (194/399)
回答No.1

うちも初心者ですがレスが付かないので気づいた点を書きます。 そのif文だとball.removeEventListenerはいつまでたっても呼ばれないので ロールオーバー/アウトを繰り返すたびにENTER_FRAMEが終了せずに繰り返し呼ばれてる事になってるようですね、スピードが上がるのはそのためだと思います。 removeEventListener側でtraceして確認してみてください。 if(ball.width==c){ ball.removeEventListener(Event.ENTER_FRAME,ballsize); trace("stop"); } ちなみにこうすると止まるかも。 if (Math.abs(ball.width - c) < 1) { ball.removeEventListener(Event.ENTER_FRAME,ballsize); trace("stop"); } ballのwidthとtargetの距離が1以下になったらストップ

shiraito
質問者

お礼

回答有り難うございます。おっしゃる通り、ball.removeEventListenerが呼ばれてなかったみたいです。 ご指摘いただいた箇所とアウト時にオーバーのイベントを削除するスクリプトと、 オーバー時にアウトのイベントを削除するスクリプトを追加で記述したところ解決しました。 助けて頂いて、誠に有り難うございます。

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

関連するQ&A

  • Actionscript3.0 子のイベントを削除

    Actionscript3.0で親のムービーから子のイベント指定して削除することは可能でしょうか? 親のステージに配置したmymcの中でballをENTER_FRAMEを使い動かしています。 親のステージに配置したbtnをクリックすることで、 ENTER_FRAMEを削除したいのですが、 下記のスクリプトだと、親のほうでmyenterframeが未定義と表示されてしまいます。 どのように記述すればよいのでしょうか? よろしくお願いいたします。 ーーーーーーーーーーーーーーーーー親ーーーーーーーーーーーーーーーーー btn.addEventListener (MouseEvent.CLICK, myclick); function myclick(event:MouseEvent):void{ mymc.removeEventListener(Event.ENTER_FRAME, myenterframe); } ーーーーーーーーーーーーーーーーーmymcーーーーーーーーーーーーーーーーー addEventListener(Event.ENTER_FRAME, myenterframe); function myenterframe(evt:Event):void { ball.x++; }

    • ベストアンサー
    • Flash
  • AS 3 mouseout & over

    以下のようにMOUSEOUT,MOUSEOVERをつかって、 インスタントにマウスオーバーするとその幅が増えていき、幅200のところで止まる。 インスタントからマウスアウトするとその幅が減っていき、幅60のところで止まる。 という事を意図して、記述しました。 しかしながら、マウスオーバーの内容は意図した通りのいくのですが、 マウスアウトの場合は少し幅が減っただけで、すぐに止まってしまいます。 どのように直せば、意図した通りに行くのでしょうか? お知恵をいただければ幸いです。 package { import flash.events.MouseEvent; import flash.events.Event; import flash.display.Sprite; public class main extends Sprite { var _sikaku:Sprite = new Sprite(); public function main(){ _sikaku.graphics.lineStyle(6,0x330066); _sikaku.graphics.drawRect(0,0,120,120); this.addChild(_sikaku); _sikaku.addEventListener(MouseEvent.MOUSE_OVER,big_off); _sikaku.addEventListener(MouseEvent.MOUSE_OUT,big_on); function big_on(event:Event):void { _sikaku.addEventListener(Event.ENTER_FRAME,tijimi); function tijimi(event:Event):void { if(_sikaku.width==60 ) { _sikaku.removeEventListener(Event.ENTER_FRAME,tijimi); } if(_sikaku.width > 60) { _sikaku.width -= 1} trace("stop!") } } function big_off(event:Event):void { _sikaku.addEventListener(Event.ENTER_FRAME,kakudai); function kakudai(event:Event):void { if(_sikaku.width < 200) { _sikaku.width += 1 trace("stop?") } if(_sikaku.width == 200) { _sikaku.removeEventListener(Event.ENTER_FRAME,kakudai); } } } } } }

  • 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
  • actionScript3.0にてTouchEventを使わなくてはな

    actionScript3.0にてTouchEventを使わなくてはならない状況になりました。 開発しなくてはならないものが、デジタルサイネージのタッチパネルで地図を表示するシステムです。 自分なりにいろいろ調べて、スクリプトを組んだのですが、プレビューで動かしてみようとすると 1046:型が見つからないか、コンパイル時定数ではありませんTouchEvent。とエラーが表示されてしまいます。 システムを構築している環境は、FlashCS4,WindowsXPで、 タッチパネルで使っているPCのOSはWindows7です。 長文になってしまいますが、スクリプトは下記のとおりです。 Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; /********************** 変数一覧 ***********************/ var speedX:int = 0; var speedY:int = 0; //var friction:Number = 0.2; map.x = -240; map.y = -180; /******************************************************/ topBtn.addEventListener(TouchEvent.TOUCH_OVER ,topTouchOver); bottomBtn.addEventListener(TouchEvent.TOUCH_OVER,bottomTouchOver); leftBtn.addEventListener(TouchEvent.TOUCH_OVER,leftTouchOver); rightBtn.addEventListener(TouchEvent.TOUCH_OVER,rightTouchOver); topBtn.addEventListener(TouchEvent.TOUCH_OUT,touchOut); bottomBtn.addEventListener(TouchEvent.TOUCH_OUT,touchOut); leftBtn.addEventListener(TouchEvent.TOUCH_OUT,touchOut); rightBtn.addEventListener(TouchEvent.TOUCH_OUT,touchOut); function topTouchOver(TouchEvent):void{ speedY = 20; } function bottomTouchOver(TouchEvent):void{ speedY = -20; } function leftTouchOver(TouchEvent):void{ speedX = 20; } function rightTouchOver(TouchEvent):void{ speedX = -20; } function touchOut(TouchEvent):void { speedY = speedX = 0; removeEventListener(Event.ENTER_FRAME,motion); } addEventListener(Event.ENTER_FRAME,motion); function motion(event:Event):void { map.x += speedX; map.y += speedY; if(map.x>=0) { map.x = 0; } else if(map.x <= -map.width + stage.stageWidth) { map.x = -map.width + stage.stageWidth; } if(map.y>=0) { map.y = 0; } else if(map.y <= -map.height + stage.stageHeight) { map.y = -map.height + stage.stageHeight; } } よろしくお願い致します。

    • ベストアンサー
    • 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
  • AS3.0 でフェードイン、

    AS3.0 でフェードイン、フェードアウトを繰り返したいんです。 _btnをマウスオーバーするとimg_mcがフェードインし、 _btnをマウスアウトするとimg_mcがフェードアウトするというものをつくりたいのですが、 下記スクリプトだと一通り動作を完了すると、ボタンにマウスを持っていっても反応しなくなります。 繰り返し動作させるにはどうしたらよいのでしょうか? var img_mc:MovieClip; img_mc.alpha = 0; _btn.addEventListener(MouseEvent.MOUSE_OVER,xClick0); function xClick0(evt){ img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha); function imgAlpha(event:Event){ img_mc.alpha += 0.05; //スピード if (img_mc.alpha > 1){ img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha); } } } _btn.addEventListener(MouseEvent.MOUSE_OUT,xClick); function xClick(evt){ img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha2); function imgAlpha2(event:Event){ img_mc.alpha -= 0.05; //スピード if (img_mc.alpha == 0){ img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2); } } }

    • ベストアンサー
    • Flash
  • ムービークッリプを所定の位置まで動かしたいのですが

    AS初心者なのですが、この度AS3.0を覚える事になり、現在勉強中です。 数冊本を購入し、読んではいるのですが基本的な文法の説明と簡単な作例(と言う程でもないサンプル)だけ載っているものが殆どで、その文法をどう使って組んで行けば良いのかが殆ど解らない状況です。 早速質問なのですが 三つのボタンにロールオーバー、ロールアウト、オンクリック時動きをつけたいのですが、どうも上手く行きません。 ソースは stop(); bt01.addEventListener(MouseEvent.CLICK, gotoURL1); bt01.addEventListener(MouseEvent.ROLL_OVER, bt01_RollOver); function gotoURL1(event:MouseEvent):void { var theURL1:URLRequest = new URLRequest("URL"); navigateToURL(theURL1); } function bt01_RollOver(event:MouseEvent):void { main_bg1.addEventListener(Event.ENTER_FRAME, movebg_01); function movebg_01(event:Event):void { main_bg1.x -= 60; main_bg2.x -= 60; if(main_bg1.x >= -960) { main_bg1.removeEventListener(Event.ENTER_FRAME, movebg_01); } } } 以上です。 すべてフレームに記述しています。 先輩方、どうかご教授よろしくお願い致します。

  • actionscript3.0 rotationについて

    actionscript3.0 rotationについて btnを押すごとにmcを時計回りに90度減速させながら回転させたいと思っています。 しかし2回ボタンを押して180度回転させるまではうまくいくのですが 3回目に270度になると、回転がとまりません。 分岐させて、-90度回そうと思うと(当たり前ですが)逆回転してしまいます。 どのように記述すればよいでしょうか? よろしくお願いします。 以下スクリプトです。 var i:int=0; function onEnter(event:Event):void{ mc.rotation += (i-mc.rotation)*0.1; } addEventListener(Event.ENTER_FRAME, onEnter); btn.addEventListener(MouseEvent.MOUSE_DOWN, MouseLDownFunc); function MouseLDownFunc(event:MouseEvent):void{ i+=90; };

    • ベストアンサー
    • Flash
  • 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が同時に発生しているので上手くいかないのでしょうか。。。 ご教授お願いいたします。

  • actionscript 3.0 勉強中のもです。

    よろしくお願いします。 ある右へ動いていく四角をクリックするとそれ自体のvisibleプロパティに変化(消える)を起こす事を意図して以下のような、プログラムを作りました。しかしながら、横移動の動作を確認しましたが、クリックをしても横移動を続けるだけでした。_mc.addEventListener(Event.ENTER_FRAME,onGo)を抜かした状態で見てみると、しっかり消えることを確認しました。しかし_mc.addEventListener(Event.ENTER_FRAME,onGo) を加えると上記のようになります。2つのイベントリスナーをつなげて書く事は間違った事ではないと思っています。どのように考えて書き直したらしたらよろしいのでしょうか?お心当たりございましたらどうぞよろしくお願いします。 package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { var _mc:Sprite = new Sprite; function Main() { _mc.graphics.beginFill(0x334455); _mc.graphics.drawRect(0,0,120,120); _mc.graphics.endFill(); _mc.x= 130; _mc.y= 220; addChild(_mc); _mc.addEventListener(MouseEvent.CLICK,onClick2); _mc.addEventListener(Event.ENTER_FRAME,onGo); } function onClick2(event:MouseEvent):void { trace(event.target.name + "をクリックしました。"); _mc.visible= !(_mc.visible); } function onGo(event:Event):void { if(_mc.visible=true) { _mc.x += 1 } } } }

    • ベストアンサー
    • HTML