ASだけで○秒停止する方法

このQ&Aのポイント
  • AS3で画像をぼかしながら消していく方法について質問しています。ひとまず動くコードを作成したが、任意の秒数停止させる方法を知りたいです。
  • AS3でぼかしながら画像を消していく方法を実装していますが、任意の秒数停止させる方法について質問です。
  • AS3で画像をぼかしながら徐々に表示し、ぼかしがなくなった後に任意の秒数停止させたいです。どのように実現できるでしょうか?
回答を見る
  • ベストアンサー

ASだけで○秒停止する方法

AS3で下記のスクリプトを書いています。 画像をぼかした状態で徐々に表示させ、ぼかしがなくなったら○秒見せて ぼかしながら消していくという内容を想定しています。 ひとまず動くのですが、ぼかしながら消していく関数を実行する前に任意の 秒数(フレーム数?)停止させたいのですが、どうすればいいのでしょうか? package { import flash.display.*; import flash.events.*; import flash.utils.* import fl.events.*; import flash.filters.*; public class Main extends MovieClip { public var logoObj1:MovieClip = new logo1(); public var blur:BlurFilter; public var i:uint = 70; public var ii:uint = 0; public function Main():void { opening(); } private function opening(e:Event = null):void { blur = new BlurFilter(); addEventListener(Event.ENTER_FRAME, BlurMinus); } private function BlurMinus(e:Event):void { blur.blurX = i; blur.blurY = i; logoObj1.filters = [blur]; logoObj1.x = w / 2; logoObj1.y = h / 2; addChild(logoObj1); if ( i == 0 ) { // ここで任意の秒数を経過したらBlurPlasを実行させたい! addEventListener(Event.ENTER_FRAME, BlurPlas); } i = i - 2; } private function BlurPlas(e:Event):void { blur.blurX = ii; blur.blurY = ii; logoObj1.filters = [blur]; logoObj1.alpha += (0 - logoObj1.alpha) / 50; if ( logoObj1.alpha == 0 ) { removeEventListener(Event.ENTER_FRAME, BlurMinus); removeEventListener(Event.ENTER_FRAME, BlurPlas); } ii = ii + 2; } } }

  • dcx147
  • お礼率33% (214/636)
  • Flash
  • 回答数2
  • ありがとう数1

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

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

「実行を○秒停止する」というニュアンスで考えるのではなくて 「実行を○秒待つ」または「実行を○秒遅延させる」と考えれば良いでしょう。 この遅延には Timer クラスを使えば良いと思います。 その場合の修正案です↓。 //--------------------------------------------- package { import flash.display.*; import flash.events.*; import flash.utils.*; //↓削除 //import fl.events.*; import flash.filters.*; //↓Timer クラスと TimerEvent クラスのインポート import flash.utils.Timer; import flash.events.TimerEvent; public class Main extends MovieClip { public var logoObj1:MovieClip = new logo1(); public var blur:BlurFilter; public var i:uint = 70; public var ii:uint = 0; //↓勝手に適当な付け加え public var w:Number = stage.stageWidth; public var h:Number = stage.stageHeight; //Timer インスタンス tm の宣言 public var tm:Timer; //↓待つミリ秒数の設定(1秒=1000ミリ秒) public var wait_ms:uint = 5000; public function Main():void { opening(); } private function opening(e:Event=null):void { blur = new BlurFilter ; addEventListener(Event.ENTER_FRAME,BlurMinus); //↓Timer インスタンス tm を作成 tm = new Timer(wait_ms,1); //↓指定ミリ秒後に setBlurPlas を実行する設定にする tm.addEventListener(TimerEvent.TIMER, setBlurPlas); } private function BlurMinus(e:Event):void { blur.blurX = i; blur.blurY = i; logoObj1.filters = [blur]; logoObj1.x = w / 2; logoObj1.y = h / 2; addChild(logoObj1); if (i == 0) { //↓BlurMinus のイベントリスナーを削除 removeEventListener(Event.ENTER_FRAME,BlurMinus); //↓タイマースタート tm.start(); } i = i - 2; } //↓setBlurPlas の定義 private function setBlurPlas(e:TimerEvent):void { //↓毎フレームBlurPlasを実行 addEventListener(Event.ENTER_FRAME,BlurPlas); } private function BlurPlas(e:Event):void { blur.blurX = ii; blur.blurY = ii; logoObj1.filters = [blur]; logoObj1.alpha += 0 - logoObj1.alpha / 50; if (logoObj1.alpha==0) { //↓削除 //removeEventListener(Event.ENTER_FRAME,BlurMinus); removeEventListener(Event.ENTER_FRAME,BlurPlas); } ii=ii+2; } } } //---------------------------------------------

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1
dcx147
質問者

補足

お返事ありがとうございます。 http://www.oro.co.jp/cd/column/flash/actionscript/wait.html は質問前に試したのですが、一度(1フレーム分)しか動作せず徐々に薄れて いくという表現ができませんでした。 引き続き具体的な回答をお願いいたします。

関連するQ&A

  • as3でフェード

    10個あるスプライトを順番にタイミングをずらしてフェードインで表示するものを 作りたいのですが、どのようにすれば良いでしょうか。 下記のようにウエイト関数つって挟み込めばできそうなのですが、 もっとスマートな方法はないでしょうか。 for (var i:int=0; i<containers.length; i++){   //フェードスタート   containers[i].addEventListener(Event.ENTER_FRAME, slideContainer);   //ウエイト挟む?   //イベント   function slideContainer(e:Event):void{      e.target.alpha += 0.01;      if (e.target.alpha = 1 ) {         e.target.removeEventListener(Event.ENTER_FRAME, slideContainer);      }   } }

    • ベストアンサー
    • 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); } } } } } }

  • 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
  • Flash AS3 減速運動の不具合の回避方法を教えて下さい

    大重美幸様のAS3.0入門ノートを使って勉強しているものです。 今回その中の「EaseingSimpleクラス」を拡張して、 任意のボタンを押すと、予めそのボタンに引数として登録しておいたステージ上のX座標、Y座標にインスタンスが減速しながら移動するクラスを作ってみました。 そこで問題発生なのですが、 ステージにボタンを二つ以上設置(仮にAとBとします)して、 「Aのボタン」をマウスダウンしてインスタンス(IdoObjとします)の移動開始して、それが指定の座標に到達する前(移動中)に「Bのボタン」を押すと意図しない座標にインスタンスが止まってしまいます。 確実に、インスタンスが静止して、次のボタンを押せば問題は起きないのですが、移動先をすぐに変更させる動きを付けるにどうしたらよいのでしょうか? よろしくお願いいたします。 タイムラインのフレームアクション idoObj→移動するインスタンス btA→ボタンA 100,100→btAが渡すX座標,btAが渡すY座標 btB→ボタンB 200,200→btBが渡すX座標,btBが渡すY座標 ********************************************************** var btObj:idoStage=new idoStage(idoObj,btA,100,100); var btObj2:idoStage=new idoStage(idoObj,btB,200,200); ********************************************************** 今回作製したidoStageクラス(下記のEaseingSimpleクラスを拡張) ********************************************************** package{ import flash.display.MovieClip; import flash.events.MouseEvent; import EaseingSimple; public class idoStage extends EaseingSimple{ var my_mc2:MovieClip;//任意のボタン var zahyoX:Number;//x座標 var zahyoY:Number;//y座標 //コンストラクタ function idoStage(mc:MovieClip,mc2:MovieClip,stgX:Number,stgY:Number){ super(mc); my_mc2=mc2; zahyoX=stgX; zahyoY=stgY; my_mc2.addEventListener(MouseEvent.MOUSE_OUT,onOUT); my_mc2.addEventListener(MouseEvent.MOUSE_OVER,onOVER); my_mc2.addEventListener(MouseEvent.CLICK,onCLICK); } public function onOUT(event:MouseEvent):void{ my_mc.stop(); my_mc2.buttonMode=false; my_mc2.alpha=1; } public function onOVER(event:MouseEvent):void{ my_mc2.buttonMode=true; my_mc2.alpha=0.5; } //引数で受け取った座標を「EaseingSimpleクラスのeaseTo」に渡してイーズする public function onCLICK(event:MouseEvent):void{ easeTo(zahyoX,zahyoY); my_mc2.buttonMode=true; my_mc2.alpha=0.3; } } } ********************************************************** EaseingSimpleクラス (ステージをクリックするとその位置にインスタンスが減速しながら移動します。) ********************************************************** package { import flash.display.MovieClip; import flash.geom.Point; import flash.events.Event; public class EaseingSimple { var my_mc:MovieClip; var endPoint:Point; //コンストラクタ function EaseingSimple(mc:MovieClip) { my_mc = mc; } //イーズ開始 public function easeTo(end_x:Number, end_y:Number):void { endPoint = new Point(end_x, end_y); my_mc.addEventListener(Event.ENTER_FRAME, easeStep); } //繰り返しステップ private function easeStep(event:Event):void { var mcPoint:Point = new Point(my_mc.x, my_mc.y); //2点間の距離 var distance:Number = Point.distance(mcPoint, endPoint); if (distance>1) { var tmpPoint:Point = getTmpPoint(); my_mc.x = tmpPoint.x; my_mc.y = tmpPoint.y; } else { my_mc.x = endPoint.x; my_mc.y = endPoint.y; my_mc.removeEventListener(Event.ENTER_FRAME, easeStep); } } //座標計算 private function getTmpPoint():Point { var tmpX:Number = my_mc.x + (endPoint.x - my_mc.x) * 0.3; var tmpY:Number = my_mc.y + (endPoint.y - my_mc.y) * 0.3; var tmpPoint:Point = new Point(tmpX,tmpY); return tmpPoint; } //イーズ中断 public function stop():void { my_mc.removeEventListener(Event.ENTER_FRAME, easeStep); } } } ********************************************************** 製作環境 FlashCS3

    • ベストアンサー
    • Flash
  • FLASH,AS3.0 クリック後、xmlからファイルを取り出す方法

    as3.0初心者です。 恐れ入りますが、現在製作中のプログラミングに関することで教えていただきたいことがあります。 外部xmlより写真データを読み込み、ステージに並べるプログラムを作っています。参考書等のサンプルからステージに並べるまではわかったのですが、ボタン【インスタンス名:btn_a】をクリックした後に写真がステージに現れるようにアレンジしたいのですが…色々ためしてもエラーが出てしまいうまくいきません。どなたか教えていただけないでしょうか? 出来れば現在のプログラムをアレンジして使いたいと思っています。 初歩的な質問で申し訳ありませんがご教授いただけないでしょうか? ★xnlloader package { import flash.display.DisplayObjectContainer; import flash.system.System; import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; public class PhotoXMLLoader { private var container:DisplayObjectContainer; private var xmlLoader:URLLoader; private var urlReq:URLRequest; //コンストラクタ public function PhotoXMLLoader(container:DisplayObjectContainer) { this.container=container; //URLLoaderのインスタンスを作る xmlLoader=new URLLoader(); //リスナーを登録する xmlLoader.addEventListener(Event.COMPLETE,onLoaded); //URLRequest urlReq=new URLRequest(); } //XMLファイルの読み込み public function loadXML(xmlurl:String,isUnicode:Boolean=true):void { //XMLファイルのURL urlReq.url=xmlurl; //unicodeでなければtrueに設定する System.useCodePage=! isUnicode; //読み込み開始 xmlLoader.load(urlReq); } //読み込み完了〜写真を並べる protected function onLoaded(eventObj:Event):void { //受信したxmlから値を取り出す var xmlObj:XML=new XML(xmlLoader.data); var photos:XMLList=xmlObj.photolist.photo; var w:int=290+10; var h:int=40+10; var row:int=1; for (var i:int=0; i<photos.length(); i++) { var photo:XML=photos[i]; //写真のURLを調べる var url:String="img/"+photo.@fname; //写真を読み込んで並べる var photoLoader:GoodLoader=new GoodLoader(url); photoLoader.x=w*(i%row); photoLoader.y=h*int(i/row)+200; ; container.addChild(photoLoader); } } } } ★goodloader package { import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; import fl.transitions.Tween; import fl.transitions.easing.*; import flash.events.IOErrorEvent; public class GoodLoader extends Loader { var urlReq:URLRequest; var tw:Tween; public function GoodLoader(url:String) { //読み完了イベントのリスナーを登録する this.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); //IOエラーイベントのリスナーを登録する this.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError); urlReq=new URLRequest(url); load(urlReq); } //読み込みエラーに対応する protected function onIOError(eventObj:IOErrorEvent):void { urlReq.url="image/io_error.jpg"; load(urlReq); } //フェードインで表示する protected function onLoaded(eventObj:Event):void { tw=new Tween(this,"alpha",Regular.easeInOut,0,1,1,true); } } }

    • ベストアンサー
    • Flash
  • 外部ASを二つ組み合わせる方法

    flash初心者です。二つのASファイルを組み合わせて作ろうとしているのですが、 外部ASをドキュメントクラスを使用して読み込み複数ある場合、調べた結果importを利用してクラスを定義出来るとの事ですが、定義が重複していますと出てしまいます。 パッケージを二個書こうとしても外部から表示可能な複数の定義は使用出来ませんと出てしまいます。二つのスクリプトを一つに纏めた方がいいのでしょうか? どなたかご教授下さい。 ASは同じディレクトリ上に配置しています。 package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.MouseEvent; import flash.events.Event; public class CardMenu extends Sprite { private var cardList:Array = ["card01", "card02", "card03", "card04", "card05"]; private var _currentCard:MovieClip; public function CardMenu() { for ( var i:int = 0; i < cardList.length; i++ ) { var mc:MovieClip = this[cardList[i]]; mc.X = mc.x0 = mc.x; mc.Y = mc.y0 = mc.y; mc.R = mc.rot = mc.rotation; mc.S = mc.sca = mc.scaleX; mc.dep = getChildIndex(mc); mc.btn.addEventListener(MouseEvent.CLICK, openHandler); mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } } private function openHandler( e:MouseEvent ):void { if (Boolean(_currentCard)) { _currentCard.X = _currentCard.x0; _currentCard.Y = _currentCard.y0; _currentCard.R = _currentCard.rot; _currentCard.S = _currentCard.sca; setChildIndex(_currentCard, _currentCard.dep); _currentCard.btn.visible = true; } _currentCard = e.target.parent as MovieClip; _currentCard.X = stage.stageWidth / 2; _currentCard.Y = stage.stageHeight / 2; _currentCard.R = 0; _currentCard.S = 1; setChildIndex(_currentCard, numChildren - 1); _currentCard.btn.visible = false; } private function enterFrameHandler( e:Event ):void { var card:MovieClip = e.target as MovieClip; card.x += ( card.X - card.x ) * 0.2; card.y += ( card.Y - card.y ) * 0.2; card.rotation += ( card.R - card.rotation ) * 0.2; card.scaleX += ( card.S - card.scaleX ) * 0.2; card.scaleY = card.scaleX; } } } package { import flash.display.Sprite; import box; public class box extends Sprite { public function Main() { var box:box = new box(); } } }

  • AS3.0 gotoAndStopを使いたい

    最近ASを始めた初心者です。 Flash AS3.0で画面遷移(フレーム移動)をカスタムクラスを用いて行いたいのですがうまくいきません。どうすればよいのかどなたか解る方教えてもらえないでしょうか。 よろしくお願いします。 flaファイル _______________________________________________________________________________ import Frame; stop(); //Aは移動するフレーム名 //aaaはボタンの名前 var Obj1:Frame = new Frame(aaa,"A"); _______________________________________________________________________________ asファイル _______________________________________________________________________________ package{ import flash.display.*; import flash.events.*; public class Frame{ var my_btn:SimpleButton; var my_Frame:String; public function Frame(btn:SimpleButton, Fr:String){ my_btn = btn; my_Frame = Fr; my_btn.addEventListener(MouseEvent.CLICK,go); } public function go(event:MouseEvent):void{ gotoAndStop(my_Frame); } } } ____________________________________________________________________________________

    • ベストアンサー
    • Flash
  • AS2.0からAS3.0にうまく変換できません。

    AS2.0からAS3.0にうまく変換できません。 はじめまして、ActionScriptを勉強し始めたばかりの初心者です。 http://blog.bonkura.jp/2008/07/flash-4.html のページのスクリプトをas3.0に直そうと思って勉強しながらやってみたんですが、 どうもうまくいきません。 書いてみたコードは以下です。 だれか添削してもらえると助かります。宜しくお願いします! stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.LEFT; var bg:MovieClip = new MovieClip(); this.setChildIndex(bg, 1); var bgPic:MovieClip = new MovieClip(); this.setChildIndex(bgPic, 0); bgPattern(); function bgPattern():void{ var myMcl:Loader = new Loader(); var oListener:Object = new Object(); var UrL:URLRequest = new URLRequest(); UrL.url = "http://blog.bonkura.jp/2008/07/08/swf/bg.jpg"; myMcl.addChild(oListener); myMcl.load(UrL, bgPic); oListener.addEventListener( Event.COMPLETE, StageSize); for(var i:Number=0; i<stage.width/100; i++){ for(var j:Number=0; j<stage.height/100; j++){ var bgP:String = "bg"+i+j; bg.addChild(new (getDefinitionByName(bgP))); this.setChildIndex(bgP, i+j*100); bg[bgP].x = i * 100; bg[bgP].y = j * 100; } } } var alphaFlag:Boolean = new Boolean(); alphaFlag = true; bg.addEventListener(Event.ENTER_FRAME, onENTERFrame); bg.addEventListener(Event.RESIZE, bg.resizeHandler); stage.addChild(bg); stage.addChild(bgPic); function StageSize():void{ bgPic.x = (stage.width/2) - (bgPic.width/2); bgPic.y = (stage.height/2) - (bgPic.height/2); } // イベントリスナー function onENTERFrame(event:Event) { if(alphaFlag){ this.alpha -= 5; if(this.alpha <= 0){ alphaFlag = !alphaFlag; } } else{ this.alpha += 5; if(this.alpha >= 100){ alphaFlag = !alphaFlag; } } } function resizeHandler(event:Event = null):void{ bgPattern(); };

    • ベストアンサー
    • Flash
  • 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); }