AS3でmouseoutとmouseoverを使用して要素の幅を動的に変更する方法

このQ&Aのポイント
  • AS3でmouseoutとmouseoverを使用して要素の幅を動的に変更する方法について質問です。
  • マウスオーバー時に要素の幅が増え、マウスアウト時に要素の幅が減るようにしたいが、マウスアウト時の動作がうまくいかない。
  • どのように修正すれば、マウスアウト時の動作を意図通りにすることができるでしょうか?
回答を見る
  • ベストアンサー

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); } } } } } }

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

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

やりたい内容は 次のような感じではないでしょうか↓。 //------------------------------------- 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); //↓塗り開始(白なら第一引数0xFFFFFF,透明なら第二引数0) _sikaku.graphics.beginFill(0x999999,1); _sikaku.graphics.drawRect(0,0,120,120); //↓塗り終了 _sikaku.graphics.endFill(); this.addChild(_sikaku); _sikaku.addEventListener(MouseEvent.MOUSE_OVER,big_off); _sikaku.addEventListener(MouseEvent.MOUSE_OUT,big_on); function big_on(event:Event):void { //↓追加 _sikaku.removeEventListener(Event.ENTER_FRAME,kakudai); _sikaku.addEventListener(Event.ENTER_FRAME,tijimi); } //↓function big_on 内から外に移動 function tijimi(event:Event):void { if (_sikaku.width > 60) { _sikaku.width -= 1; } else { _sikaku.removeEventListener(Event.ENTER_FRAME,tijimi); } //trace("stop!"); } function big_off(event:Event):void { //↓追加 _sikaku.removeEventListener(Event.ENTER_FRAME,tijimi); _sikaku.addEventListener(Event.ENTER_FRAME,kakudai); } //↓function big_off 内から外に移動 function kakudai(event:Event):void { if (_sikaku.width<200) { _sikaku.width+=1; //trace("stop?"); } else { _sikaku.removeEventListener(Event.ENTER_FRAME,kakudai); } } } } } //------------------------------------- (と言うか,,,そもそも質問するカテゴリが違っているように思いますが。。。)

naonao321
質問者

お礼

ご回答ありがとうございます。 試したところ、無事に動いてくれました。 なるほど、1つのファンクショんの中に 拡大、縮小を一緒に入れることは気づきませんでした。 そもそもフラッシュのカテゴリーがあったのですね。 またよろしくお願い致します。

関連するQ&A

  • ActionScript3.0 初心者です

    ActionScript3.0 初心者です。 ムービークリップballに対して、以下のようなスクリプトを書いて、 ロールオーバーすると徐々に大きく、 アウトすると徐々に小さくなるようにしています。 しかし、初めはうまくいくのですが、 オーバー、アウトの回数を重ねるごとに、 縮尺の間隔が短くなってしまいます。 常に同じ間隔で縮尺させるにはどうすればいいのでしょうか? よろしくお願いします。 ball.addEventListener (MouseEvent.MOUSE_OVER, r_over); ball.addEventListener (MouseEvent.MOUSE_OUT, r_out); var c:int; var nDeceleration:Number = 0.1; function r_over(event:MouseEvent):void { c = 400; ball.addEventListener(Event.ENTER_FRAME, ballsize); function ballsize(event:Event):void { if(ball.width==c){ ball.removeEventListener(Event.ENTER_FRAME,ballsize); } else{ ball.width +=(c - ball.width) *nDeceleration; ball.height +=(c - ball.height) *nDeceleration; } } } function r_out(event:MouseEvent):void { c = 150; ball.addEventListener(Event.ENTER_FRAME, ballsize); function ballsize(event:Event):void { if(ball.width==c){ ball.removeEventListener(Event.ENTER_FRAME,ballsize); } else{ ball.width +=(c - ball.width) *nDeceleration; ball.height +=(c - ball.height) *nDeceleration; } } }

  • ボタンについて(CS4,AS3)

    HPのメニュー用に、クリックするとフレーム移動するボタンを作っています。 フレーム1以外のフレームには、フレーム1に設置してあるボタンで指定したフレームとは異なるフレームに 移動させたいので、新たにフレーム1のボタンとは別のボタンを設置しています。 プレビューでフレーム1のボタンをクリックすると正常に動くのですが、 フレームが移動した後に再度ボタンをクリックすると動かず、全てのボタンが反応しません。 ■フレーム1に設置してあるボタン test_a1.addEventListener(MouseEvent.CLICK , testA1); test_b1.addEventListener(MouseEvent.CLICK , testB1); test_c1.addEventListener(MouseEvent.CLICK , testC1); function testA1(event : MouseEvent) :void{ gotoAndPlay(1); } function testB1(event : MouseEvent) :void{ gotoAndPlay(51); } function testC1(event : MouseEvent) :void{ gotoAndPlay(101); } ※フレーム1、51、101にはstop();で停止するようにしています。 ■フレーム51に設置してあるボタン test_a2.addEventListener(MouseEvent.CLICK , testA2); test_b2.addEventListener(MouseEvent.CLICK , testB2); test_c2.addEventListener(MouseEvent.CLICK , testC2); function testA2(event : MouseEvent) :void{ gotoAndPlay(11); } function testB2(event : MouseEvent) :void{ gotoAndPlay(61); } function testC2(event : MouseEvent) :void{ gotoAndPlay(111); } コンパイルエラーは出ていません。 ネットで調べても何故、フレーム1以外のボタンが動かないのか分かりません。 どなた様か教えていただけると助かります。 使用しているソフトはAdobe Flash CS4で、スクリプトはActionScript3.0です。 よろしくお願いします。

  • AS3.0 Timerの使い方

    AS3.0 Timerの使い方 a_mc、b_mc、c_mcがあり、a_mcが再生された1秒後にb_mcを作動させ b_mcが再生された0.5秒後にc_mcを再生というようにしたいのですが その場合、Timerはどのようにすれば良いのでしょうか? 初心者ですので、なるべく基本的な作り方が理想です。 下記のコードを参照にして頂ければと思います。 また、下記で間違っている部分がありましたらご指摘ください。 Flash CS3を使用しております。 宜しくお願い致します。 a_mc.y = 450; b_mc.y = 450; c_mc.y = 450; a_mc.alpha = 0; a_mc.addEventListener(Event.ENTER_FRAME, a_up); function a_up(event:Event):void { a_mc.y -= 2; a_mc.x -= 1; a_mc.alpha += 0.03; if (a_mc.y == 200) { a_mc.removeEventListener(Event.ENTER_FRAME, a_up); } } b_mc.addEventListener(Event.ENTER_FRAME, b_up); function b_up(event:Event):void { b_mc.y -= 2; b_mc.rotation += 6; if (b_mc.y == 200) { b_mc.removeEventListener(Event.ENTER_FRAME, b_up); } } c_mc.addEventListener(Event.ENTER_FRAME, c_up); function c_up(event:Event):void { c_mc.y -= 2; c_mc.x += 1; if (c_mc.y == 200) { c_mc.removeEventListener(Event.ENTER_FRAME, c_up); } }

    • ベストアンサー
    • 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
  • 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
  • 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
  • AS3.0

    ボタン(btn_start)を押したらMC(main1)が動く指定をしたつもりですが ボタンを押すとmain1が消えてしまいます。 間違っている部分がお分かりになる方、宜しくお願い致します。 import fl.transitions.Tween; import fl.transitions.easing.*; var main_uptween:Tween; btn_start.addEventListener(MouseEvent.CLICK,main_start); function main_start(event:MouseEvent):void { main1.addEventListener(Event.ENTER_FRAME,main_up); } function main_up(event:Event):void { main_uptween = new Tween(main1, "y", Bounce.easeOut, 400, 10, 4, true); }

  • flashcs4 as3.0のエラーについて

    フレーム1にボタンを配置して ボタン(myb)を押すと、ボタンが消えると同時にマウスがmc表示に変わり mcをドラッグしてmc1に当たると、フレーム2の画面が表示するようにしたいのですが ムービープレビューして試してみると、フレーム2の画面(TツールでCLEARを書いているだけ)は表示するのですが、次のエラーが表示されてしまいます。 「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」 どのように回避したらよいのでしょうか。よろしくお願いいたします。 stop(); mc.visible=false; myb.stage.addEventListener(MouseEvent.CLICK, mystart); function mystart(event){ myb.visible=false; Mouse.hide(); mc.visible=true; mymouse(event); } mc.stage.addEventListener(MouseEvent.MOUSE_MOVE,mymouse); function mymouse(event):void{ mc.x = stage.mouseX; mc.y = stage.mouseY; event.updateAfterEvent(); } mc.stage.addEventListener(Event.ENTER_FRAME,mymc); function mymc(e:Event):void{    if(mc1.hitTestObject(mc)){ gotoAndStop(2); } }

    • ベストアンサー
    • 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); } } } 以上です。 すべてフレームに記述しています。 先輩方、どうかご教授よろしくお願い致します。

  • flashcs4 as3.0のエラーについて

    TypeError: Error #1010: 条件は未定義であり、プロパティがありません。 at 2mouse_03_fla09_as3_fla::MainTimeline/mymouse() 以下のスクリプトを実行すると上記のエラーが発生してしまいます。 ネットで調べてもわかりませんでした。AS3.0を学習していることろです。 よろしくお願いいたします。 ---------------------------------------------------------- やっていることは、マウスをMC(mc)に変換して、mc1との当たり判定をしたいだけです。 実行すると、実行画面でマウスを動かすと同時に上記のエラー出てしまいます。 ----------------------------------------------------------- stop(); mc.visible=false; myb.stage.addEventListener(MouseEvent.CLICK, mystart); function mystart(event){ myb.visible=false; Mouse.hide(); mc.visible=true; mymouse(event); } mc.stage.addEventListener(MouseEvent.MOUSE_MOVE,mymouse); function mymouse(event):void{ mc.x = stage.mouseX; mc.y = stage.mouseY; mc.event.updateAfterEvent(); } mc.stage.addEventListener(Event.ENTER_FRAME,mymc); function mymc(event){ if(mc1.hitTestObject(mc)){ mc.stage.removeEventListener(Event.ENTER_FRAME,mymouse); mc.visible=false; } }

    • ベストアンサー
    • Flash

専門家に質問してみよう