hitTest ムービークリップとの判定: ActionScript2.0

Pocket

ActionScriptを使った衝突判定の覚書です。

hitTestは下記のように2通りの判定があります。

  • ムービークリップとの衝突を判定。
  • 点との衝突を判定。

ムービークリップとの衝突判定

ムービークリップとの衝突を判定する際にhitTestは境界ボックスを評価します。
ActionScriptヘルプは下記のように記載しています。

my_mc.hitTest(target)
target の境界ボックスと指定されたインスタンスの境界ボックスを評価し、両者が任意の点で重なるか交差する場合に true を返します。

ムービークリップとの衝突判定は引数としてムービークリップを1つ取る。

var r = {_x:0, _y:100};
var b = {_x:240, _y:100};
var red_mc = attachMovie('clip_red', 'red', 0, r);
var blue_mc = attachMovie('clip_blue', 'blue', 1, b);
red.onEnterFrame = function() {
 hit = this.hitTest(blue_mc);
 if (hit) {
 	hit_txt = '衝突';
 } else {
 	this._x += 10;
 }
};

点との衝突判定

hitTestを点との衝突判定に使う場合の書式は下記のとおりです。

my_mc.hitTest(x, y, shapeFlag)

shapeFlagについて

hitTestの引数が座標(x,y)の場合、衝突の判定をmy_mcの境界ボックスで行うか、シェイプで行うかを第3引数shapeFlagで指定できる。
true ⇒ シェイプで判定・・・境界ボックス内であってもムービークリップのシェイプと重なっていない場合はfalseを返す。
false ⇒ 境界ボックスで判定・・・境界ボックス内であればばシェイプとの重なりとは関係なくtrueを返す。

下記サンプルは星クリップとマウスの衝突を判定する
hitTestの第3引数がtrueのため、境界ボックスの内側でも星(シェイプ)と重なっていない場合は衝突なし。

_root.onEnterFrame = function() {
	var hit = _root["star_mc"].hitTest(_root._xmouse, _root._ymouse, true);
	if (hit) {
		hit_txt = 'あり';
	} else {
		hit_txt = 'なし';
	}
};

コメント


  1. No quseiotn this is the place to get this info, thanks y’all.

    コメント by Malinda — 2011-07-22 @ 1:19 PM

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。