アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

}
}

A 回答 (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;
}

}
}
//---------------------------------------------
    • good
    • 0

この回答への補足

お返事ありがとうございます。
http://www.oro.co.jp/cd/column/flash/actionscrip …

は質問前に試したのですが、一度(1フレーム分)しか動作せず徐々に薄れて
いくという表現ができませんでした。

引き続き具体的な回答をお願いいたします。

補足日時:2012/03/22 13:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!