リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ ボタンの上にボタンを重ねた失敗

ActionScript

ボタンの上にボタンを重ねた失敗

ボタンの上にマウスが乗ったらボタンを重ね、マウスがアウトした場合ボタンを消去する処理の失敗と対処のサンプル。
対処として「MOUSE_OUT」を使用せず、衝突判定「hitTestPoint」を使用。

【サンプル】

JavaScriptを有効にし、最新のFlashPlayerをインストールお願いしますGet Adobe Flash player

サンプルソースをダウンロード


【XMLソースコード】

//---------------------------------------------------------------------サンプル準備
var a_bt:SimpleButton = new A_bt();
var as_bt:SimpleButton = new As_bt();
var b_bt:SimpleButton = new B_bt();
var bs_bt:SimpleButton = new Bs_bt();
//大ボタン配置
a_bt.x = 20;
a_bt.y = 20;
addChild(a_bt);
b_bt.x = 270;
b_bt.y = 20;
addChild(b_bt);
//小ボタン配置
a_bt.addEventListener(MouseEvent.MOUSE_OVER,a_bt_over);
function a_bt_over(e:MouseEvent):void {
	as_bt.x = 20+50;
	as_bt.y = 20+60;
	addChild(as_bt);
}
b_bt.addEventListener(MouseEvent.MOUSE_OVER,b_bt_over);
function b_bt_over(e:MouseEvent):void {
	bs_bt.x = 270+50;
	bs_bt.y = 20+60;
	addChild(bs_bt);
}
//---------------------------------------------------------------------失敗例
//ボタン消去処理
a_bt.addEventListener(MouseEvent.MOUSE_OUT,a_bt_out);
function a_bt_out(e:MouseEvent):void {
	removeChild(as_bt);
}

//---------------------------------------------------------------------対処
//ボタン消去処理
stage.addEventListener(MouseEvent.MOUSE_MOVE,test_f);
function test_f(e:MouseEvent):void{
	//大小ボタンともにマウスから外れていれば
	if (b_bt.hitTestPoint(stage.mouseX,stage.mouseY,true) == false) {
			if (bs_bt.hitTestPoint(stage.mouseX,stage.mouseY,true) == false) {
				if(bs_bt.root){
					removeChild(bs_bt);
				}
			}
	}
}
last update 2009.3.20
参考・出典等
「特に無し」

▲page top

topmemoblogtestaboutmail
Copylight(C)2008-2009 Riptac. All Rights Reserved.