ActionScript 3.0入門ノート CS4でタグ「getBounds()」が付けられているもの

(section06-03 衝突判定から抜粋)

 intersects()とcontainsRect()は矩形と矩形の衝突判定を行う関数です。intersects()は比較する矩形と矩形が少しでも重なっているときにtrueになり、containsRect()は矩形の中に比較する矩形が完全に入っているときにtrueになります。
 次の例はcontainsRect()のサンプルです。写真のphoto_mcインスタンスを写真枠のphotoFrame_mcインスタンスにドラッグ&ドロップしたとき、photo_mcがphotoFrame_mcの領域の中に完全に入っているかどうかを判定しています。photo_mcがphotoFrame_mcの領域の中に完全に入っているときはphoto_mcをphotoFrame_mcの中央に位置揃えし、領域内に完全に入っていないときはphotoFrame_mcの外に出してしまいます。

fig06-03-03a.jpgswfを試す

[:script:]photo_mcをphotoFrame_mcの矩形の中に入るようにドロップしたか判定する
//マウスダウンでドラッグ開始
photo_mc.addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag);
//ドラッグ開始
function onStartDrag(eventObj:MouseEvent):void {
	photo_mc.startDrag(false);
	photo_mc.alpha=0.5;
	stage.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
}
//ドラッグ終了
function onStopDrag(eventObj:MouseEvent):void {
	photo_mc.stopDrag();
	photo_mc.alpha=1;
	containsCheck();
}
//photo_mcの矩形がphotoFrame_mcの矩形に完全に入っているかどうかチェックする
function containsCheck():void {
	//photoFrame_mcの矩形
	var frameBounds:Rectangle=photoFrame_mc.getBounds(stage);
	//photo_mcの矩形
	var photoBounds:Rectangle=photo_mc.getBounds(stage);
	//photo_mcの矩形がphotoFrame_mcの矩形に完全に入っているかどうか
	if (frameBounds.containsRect(photoBounds)) {
		//入っていれば中央に表示する
		var center_x:Number=frameBounds.left+photoFrame_mc.width/2;
		var center_y:Number=frameBounds.top+photoFrame_mc.height/2;
		photo_mc.x=center_x-photoBounds.width/2;
		photo_mc.y=center_y-photoBounds.height/2;
	} else {
		//photoFrame_mcの外に出してしまう
		photo_mc.x=frameBounds.right+photoBounds.width/2;
		photo_mc.y=frameBounds.top+photoBounds.height/2;
	}
}
(section06-02 Rectangleクラスから抜粋)

 次のサンプルは回転しながら水平移動するインスタンスbox_mcがステージの両端で跳ね返ります。box_mcが回転しているので変化する領域をgetBounds()で取得し、box_mcの左右の辺の座標をleft、rightのプロパティで取り出しています。

fig06-02-06_shiji.jpgswfを試す

[:script:]回転しながら移動し、ステージの両端で跳ね返る
var dx:int=5;
var dd:int=15;
box_mc.addEventListener(Event.ENTER_FRAME, onEnterframe);
function onEnterframe(eventObj:Event):void {
	//box_mcの領域を調べる
	var bounds:Rectangle=box_mc.getBounds(stage);
	//左右の辺がステージからはみ出たら動作を反転する
	if (bounds.left<0) {
		dx*=-1;
		dd*=-1;
	} else if (bounds.right>stage.stageWidth) {
		dx*=-1;
		dd*=-1;
	}
	//移動と回転
	box_mc.x+=dx;
	box_mc.rotation+=dd;
}
まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

タグ

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ