index » ラボ&備忘録 » Flash » MCでボタンの作成 このエントリーを含むはてなブックマーク

MCでボタンの作成

2005.03.06

以前CubixのナビゲーションをFlashでやっていた頃のスクリプトです↓

よくみると分かりますが、実はこれは失敗作です。

なぜかというと、デザインがどうのこうの言うわけではなく、、メニューにマウスを乗せて素早くFlashの外にマウスを持っていくと、Out用のラベルに飛ばず途中で終ってしまいます。(;'Д')!!

これは、Overムービーの途中でマウスが外れたときに、きちんと判定ができて居ない為ですね。

以前は一生懸命考えたんですけど、結局解決できずにこれで妥協してしまいましたが、気になっていたのでこれを何とかする事にしました。こういうボタン作成は今後不可欠になってくるだろうし。

ちなみに、このFlashは以下のような判定でOutラベルに飛ばしています。

onClipEvent (enterFrame) {
	if (!_parent.hitTest(_root._xmouse,_root._ymouse,false)) {
		_parent.gotoAndPlay('out');
	}
	else {
		_parent.stop();
	}
}

hitTestで判定していたんですねぇ…。 マウスがFlashの外に出た時、マウス座標がnullとかになるならまだこれでも出来たかもしれませんが…。 今となってはどうでもいいことです。

灰色⇒青色 = Over用ムービー
緑色⇒灰色 = Out用ムービー

その1

見やすく、Over用ムービーとOut用ムービーの色を変えてあります。
まずは、ムービークリップに直接スクリプトを書くのをやめました。

this.onRollOver = function() {
	gotoAndPlay('out');
};
this.onRollOut = function() {
	if (this.moving) {
		gotoAndPlay('over');
	}
};

これでも、ぱっとみそれっぽいのですが、Overムービーが再生し終わる前でもマウスを外すとOutに飛んでしまいます。

次いこう。

その2

ついに完成形?!

ムービークリップのタイムラインActionScript。

//frame1
this.stop();
this.moveing = false;
this.onRollOver = function() {
	if (!this.moveing) {
		gotoAndPlay(2);
	}
};
this.onRollOut = function() {
	this.moveing = false;
};
this.onEnterFrame = function() {
};

//frame2
this.moveing = true;
this.onRollOver = function() {};

//frame10
stop();
this.onEnterFrame = function() {
	if(!this.moveing){
		this.gotoAndPlay(11);
		this.onEnterFrame = function () {}
	}
}

//frame11
this.moveing = true;

//frame21
gotoAndPlay(1);
this.moveing = false;

フラグを立ててどこを再生中か判定しつつ、各ムービーラベルの最初にイベント関数を初期化するように変更しました。 当初の予定は、ムービー中にはマウスが乗っても外れてもOver用ムービーを最後(完璧に青になった時点)までを流してから、 マウスが外れたらOut用ムービーに飛ばすと言う感じに考えていたんですが、連続でマウスを乗せるとアレレな状態に…。

その3

その2の色を変えてそれっぽくしてみました。 一番上のCubixのメニューはこのタイプですね。

その4

ムービー中に再度mouseOverしても最初のフレームに戻って流すようにしてみました。

//frame1
this.stop();
this.moveing = false;
this.onRollOver = function() {
	gotoAndPlay(2);
};
// 初期化する
this.onRollOut = function() {
	this.moveing = false;
};
this.onEnterFrame = function() {
};

//frame2
this.moveing = true;
this.onRollOver = function() {};

//frame10
stop();
this.onEnterFrame = function() {
	if(!this.moveing){
		this.gotoAndPlay(11);
		this.onEnterFrame = function () {}
	}
}

//frame11
this.moveing = true;

//frame21
gotoAndPlay(1);
this.moveing = false;

むしろこっちの方がなめらか? 最初の予定は無かった事にして、これが完成形って事で。 場合によってその3と使い分ければ良いかな。 実際は、クリックしたの時のムービー等もあったほうがイケてるっぽいですが、それはそのうち。

やっと完成~ハァハァ(;'Д')