ムービークリップオブジェクトはFlashの基本となるオブジェクトです。Flashムービー自体をSWFファイルで書き出して、他のムービーにムービークリップシンボルとして使用することができます。
ムービークリップオブジェクトの特徴として以下のものがあげられます。
ムービークリップオブジェクトは以下のときに生成されます。
_x | x座標 |
---|---|
_y | y座標 |
_height | 高さ |
_width | 横幅 |
_xscale | 横幅の拡大縮小率(%) |
_yscale | 縦幅の拡大縮小率(%) |
_rotation | 回転角度 |
_alpha | インスタンスの透明度(%) |
_visible | 表示/非表示 |
_xmouse | インスタンスから見たマウスのx座標 |
_ymouse | インスタンスから見たマウスのy座標 |
_name | インスタンス名 |
_parent | 一つ上の階層のインスタンス |
_root | 大元のタイムライン |
_target | インスタンスのターゲットパス |
_droptarget | ドラッグ先のインスタンスのターゲットパス |
_totalframes | 総フレーム数 |
_currentframe | 現在のフレーム番号 |
_framesloaded | ロードが完了したフレーム番号 |
_level* | 各レベルの大元のタイムライン(*は数字) |
_url | そのインスタンスがロードされたURL |
移動させたいムービークリップにムービークリップアクションをつけます。
onClipEvent(enterFrame) { this._x+=10; }
クリップイベントループを使って_xの値を増やすことで右方向に移動します。
ムービー全体で一つの値となるプロパティ
_focusrect | フォーカスがある場合の矩形表示のオン/オフ |
---|---|
_highquality | ムービーのレンダリング品質の設定 |
_soundbuftime | サウンドのストリーミングを開始するまでのバッファ秒数 |
stop() | タイムラインの停止 |
---|---|
play() | タイムラインの再生 |
prevFrame() | 一つ前のフレームにジャンプして停止 |
nextFrame() | 次フレームにジャンプして停止 |
gotoAndPlay() | 指定されたフレームにジャンプして再生 |
gotoAndStop() | 指定されたフレームにジャンプして停止 |
getURL() | URLをリクエストしてブラウザに表示 |
startDrag() | ドラッグを開始 |
stopDrag() | ドラッグの停止 |
setMask() | ムービークリップを別のマスクとして指定 |
attachMovie() | シンボルから新規のインスタンスを生成 |
createEmptyMovieClip() | 空のムービークリップを生成 |
createTextField() | 空のテキストフィールドを生成 |
duplicateMovieClip() | インスタンスを複製 |
removeMovieClip() | 生成したムービークリップインスタンスの消去 |
getDepth() | 深度(Level)を取得 |
swapDepth() | 深度(Level)の入れ替え |
hitTest() | 重なりを判定 |
getBounds() | 座標の取得 |
globalToLocal() | グローバル座標をローカル座標に変換 |
localToGlobal() | ローカル座標からグローバル座標への変換 |
loadMovie() | 外部SWFファイル/外部JPGファイルの読み込み |
unloadMovie() | loadMovie()で読み込まれたSWFを消去 |
getBytesLoaded() | ムービークリップのロードされたバイト数を取得 |
getBytesTotal() | ムービークリップのデータサイズの取得 |
loadVariables() | 外部からの変数読み込み |
duplicateMovieClip()メソッドを使用してタイムライン上に存在するムービークリップの複製ができます。書式は以下のとおりです。
複製元のムービークリップインスタンス.duplicateMovieClip(複製後のインスタンス名, 深度)
グローバル関数として記述する場合には以下のようになります。
duplicateMovieClip(複製元のムービークリップインスタンス, 複製後のインスタンス名, 深度)
深度とは、オブジェクトの重なり順のことで、大きいものほど手前に表示されます。新しくムービークリップを作成する場合には、使用されていない数値を指定する必要があります。
複製したムービークリップは複製もとのムービークリップと同じプロパティの値を持ちます。
元のムービークリップのインスタンス名をa_mcとして、メインムービーに以下のフレームアクションを記述します。
for(i=0; i<10; i++) { a_mc.duplicateMovieClip("a"+i, i); }
この例では複製を10個作成しています。複製したムービークリップは 同じ位置に複製されて重なってしまいます。
ライブラリに登録してあるムービークリップシンボルをattachMovie()メソッドを使用して生成することができます。書式は以下のとおりです。
付加するムービークリップインスタンス.attachMovie(シンボル識別子, 新規インスタンス名, 深度)
_root.attachMovieClip("test","test_mc",10);
この例ではステージ上(_root)に生成しています。
duplicateMovieClip()メソッド、attachMovie()メソッドで 作成したムービークリップインスタンスはremoveMovieClip()メソッドを使用して削除できます。 書式は以下のとおりです。
削除するムービークリップインスタンス.removeMovieClip()
グローバル関数として記述する場合には、以下のようになります。
removeMovieClip(削除するムービークリップインスタンス)
startDrag()メソッドでドラッグの開始ができます。書式は以下のとおりです。
ドラッグ対象のムービークリップインスタンス.startDrag(吸着の可否, 左, 上, 右, 下)
グローバル関数として記述する場合には、以下のようになります。
startDrag(ドラッグ対象のムービークリップインスタンス, 吸着の可否, 左, 上, 右, 下)
「吸着の可否」にTrueを指定するとマウスカーソルに吸着します。省略可能です。一度に一つのオブジェクトしか吸着はできません。他に吸着していたものは解除されます。
「左、上、右、下」は移動範囲を指定します。省略可能です。
マウスポインタに使用したいムービークリップインスタンスに以下のムービークリップアクションをつけます。
onClipEvent(load) { Mouse.hide(); this.startDrag(true); }
Mouseオブジェクトのhide()メソッドで通常のマウスカーソルを消しています。
stopDrag()メソッドでドラッグの停止ができます。書式は以下のとおりです。
ドラッグ対象のムービークリップインスタンス.stopDrag()
グローバル関数として記述する場合には、以下のようになります。
stopDrag(ドラッグ対象のムービークリップインスタンス)
hitTest()メソッドで衝突の判定ができます。以下の判定ができます。
ムービークリップ同士の衝突判定を行います。判定はオブジェクトの形状に関わらず長方形で判定が行われます。
ムービークリップインスタンス.hitTest(対象のムービークリップインスタンス)
ムービークリップが指定の座標と重なっているかと判定します。「形状判定」は省略すると四角形で判定が行われ、trueを指定すると形状で判定が行われます。
ムービークリップインスタンス.hitTest(x座標, y座標, 形状判定)
移動するオブジェクトball_mcを用意します。さらに適当なオブジェクトを作成して、以下のムービークリップアクションを記述します。
onClipEvent(enterFrame) { if ( this.hitTest(_parent.ball_mc) ) { rad=Math.atan2(_parent.ball_mc._y-this._y,_parent.ball_mc._x-this._x); _parent.ball_mc._rotation=rad*180/Math.PI; _parent.ball_mc.speed=20; } }
ムービークリップball_mcとの衝突判定を行い、衝突した際には、
をしています。ピンボールのバンパーみたいなものですね。ほんとは位置も修正した方がいいのですが面倒なので…。^^;
衝突した際にremoveMovieClip()メソッドでオブジェクトを消すようにすれば、ブロック崩しのブロックが表現できますね。ただし、消すためには、dupulicateMovieClip()メソッドやattachMovieClip()メソッドを使用してオブジェクトを生成しておく必要があります。
loadMovie()メソッドを使って外部のムービー(SWFファイル)や 画像(JPGファイル)を読み込むことができます。書式は以下のとうりです。
ムービークリップインスタンス.loadMovie(外部ファイルのURL)
グローバル関数として記述する場合には、以下のようになります。
loadMovie(外部ファイルのURL, 読み込み位置)
URLには、SWFファイルまたはJPGファイルのURLアドレスを指定します。読み込み位置には ムービークリップのインスタンス名またはドキュメントのレベル(_level0, _level1, ...)を指定します。
test_mcムービークリップ(手動でもcreateEmptyMovieClip()でも可)に外部SWFファイル・外部JPGファイルを読み込みます。
test_mc.loadMovie("test.swf");// 外部SWFファイルを読み込み
test_mc.loadMovie("test.jpg");// 外部JPGファイルを読み込み
loadMovie()メソッドを使って外部ファイルを読み込み後に処理を行う際には、以下のように行います。getBytesLoaded()とgetBytesTotal()を使って以下のように記述します。
【読み込みを行うムービークリップインスタンスのムービークリップアクション】
onClipEvent(data) { // データ読み込み時に発生するイベントdata
if (this.getBytesTotal()>4 && this.getBytesLoaded() >=this.getBytesTotal()) {
終了後処理
} else {
終了前処理
}
}
データの読み込みが開始されるとdataイベントが発生します。その際に、読み込んだデータサイズとトータルのデータサイズを比較(>=)して終了しているかどうかを判別します。ただし、開始直後にどちらも0の値をとることがあるので、その場合には、終了前としています。
onData()イベントハンドラメソッドを定義して同様の読み込み待ちの処理が可能なのですが、loadMovie()メソッドを使った場合、定義したメソッドがクリアされてしまうために、onClipEvent(data)を使わないといけません。
一定の大きさ(400×300)に合うように縦横比を保持して拡大縮小する例を考えます。400×300の大きさの四角形をシンボルとして 登録し、そのインスタンスに以下のムービークリックアクションを記述します。
onClipEvent(data) { // データ読み込み時に発生するイベントdata
if (this.getBytesTotal()>4 && this.getBytesLoaded() >=this.getBytesTotal()) {
xscale=400/_width;
yscale=300/_height;
if (xscale>=yscale && yscale>=100) || (xscale<yscale
} else {
終了前処理
}
}
loadVariables()メソッドを使って外部に定義した変数を読み込むことができます。書式は以下のとおりです。
ムービークリップインスタンス.loadVariables(URL, メソッド)
URLには、CGIまたは外部のテキストファイルを指定します。メソッドはCGIから読み出す場合にPOSTを指定します。
外部テキストファイルには、
変数1=値1&変数2=値2&…
のように変数の値を定義することができます。
メニューを外部ファイルで定義してFlashなしで編集ができるようにしてみます。
on(release) { getURL(url); }
_root.loadVariables("menu.txt");// メインタイムラインの変数として読み込み
_root.onData=function () { menu1.botan=botan1; menu1.url=url1; menu2.botan=botan2; menu2.url=url2;// 必要なだけ同様に入れる
}
loadVariables()メソッドもロードの実行を待たずに次のステートメントの実行をするので、 直後に変数を使ってもまだ値がよみこまれていない場合があります。そのため、onData()イベント ハンドラメソッドでデータの読み込みがあったときに代入を行っています。
Programming Laboratory (Shio seminar)