WebプログラミングT

 目次へ 前へ 次へ

2007/12/4 久米

4.ActionScriptの応用 モーションダイナミック制御(3)

4.4 複製

タイムライン上に存在するMovieClip(インスタンス)を、スクリプトで複製する。

  方法 説明
1 インスタンス.duplicateMovieClip(新しい名前, 重なり順);

インスタンスを複製するメソッド。
重なり順は数が大きいほど上になる。

演習 ハンコを作ろう

 

例題 雨を降らせよう

//フレームアクション
//複製 雨

var depth=1;

this.onEnterFrame=function(){
    var nm="raindrop_mc"+depth;
    raindrop_mc.duplicateMovieClip(nm, depth);
    depth++;
}
//複製 雨
//raindrop_mcのスクリプト

onClipEvent(load){
    _x=Math.floor(Math.random()*Stage.width);
    _y=-10;
    _alpha=20+Math.random()*50;
}

onClipEvent(enterFrame){
    _y+=10;
    if(_y>Stage.height){
        this.removeMovieClip();//スクリプトで生成したもののみ削除可能
    }
}

 

4.5 生成

タイムライン上に存在しないMovieClip(インスタンス)を、スクリプトから生成する。

  方法 説明
1 インスタンス.attachMovie(リンケージ識別子, 新しい名前, 重なり順);

インスタンス上(ステージ上)に、
リンケージで指定したMovieClipを生成する。
重なり順は数が大きいほど上になる。

※リンケージ識別子について:
flaファイルをパブリッシュしてswfファイルにする時、ライブラリの中で一度もタイムライン上に配置していないものは出力されません。
しかし、リンケージ識別子を持つものはパブリッシュされます。
※リンケージ識別子設定方法
シンボルのプロパティで識別子を大抵シンボル名に、および「actionScriptに書き出し」にチェックを入れる。

演習 ハンコを作ろう

 

例題 金持ち

//生成 コイン
//フレームアクション

var depth=1;

goldMine_mc.onRelease=function(){
    var coinName="coin"+depth;
    _root.attachMovie("CoinMC", coinName, depth);
    newObj_mc=eval(coinName);//"_root."+coinNameでも可
    newObj_mc._x=_root._xmouse;
    newObj_mc._y=_root._ymouse;
    depth++;
}

 

コラム 複製や生成したオブジェクトのfunction

obj.setPosition(x, y); などとやりたいところですが、
obj._x=x; obj._y=y; とオブジェクト指向に反して変数をいじっています。

 

 

演習 クリスマスの雪を降らせてみよう

 

SnowMCシンボルのフレームアクション

//雪SnowMC
//フレームアクション

var mado=_root.getMado();//雪を降らせる範囲を示すオブジェクトを取得

var w = mado._width;
var h = mado._height;
var xx=mado._x;
var yy=mado._y;

var n = Math.round(Math.random()*1000);//0-999までの乱数
this.swapDepths(n);
this._alpha = 100*n/1000+50;

this._x = Math.random()*w+xx;
this._y = Math.random()*h+yy;

this._xscale = this._yscale=Math.random()*50+100;

var dx = Math.random()*200;
var fy = 1+Math.random()*3;

this.onEnterFrame=function() {
    this._x += Math.cos((this._y+dx)/60);
    this._y += fy;
    if (this._y>=(h+yy)) {
        this._y = yy;
    }
    if ((this._x>=(w+xx)) || (this._x<=xx)) {
        this._x = Math.random()*w+xx;
        this._y = yy;
    }
}