index » ラボ&備忘録 » Flash » オブジェクトドラッグのお勉強 このエントリーを含むはてなブックマーク

オブジェクトドラッグのお勉強

2004.06.18

リアルタイムにカーソルの座標を表示するテスト /1kb

とりあえず、後々便利なので座標表示させるアクションだけ先にやっておくことに。
最初2フレームに分けて再生させてたんですが、どうもカクカクするので調べたら「enterFrame」と言うパラメータを発見!


オブジェクトをマウスでドラッグするテスト /1kb

drag_001.swf / 1kb

ドラッグするのってすごい難しい技術かと思ってたんですが、ドラッグ用の関数が最初から用意されていてほんの1行で出来てしまいました。

this.startDrag(); // ドラッグ開始
this.stopDrag(); // ドラッグ終了

これだけ!!

ドラッグする場合は、深度も更新させた方が良いらしいので、

this.swapDepths(0);

も加えて、アクティブオブジェクトを最前面に出すようにしました。

素早くドラッグしたり、キャンバスの外までドラッグしようとするとマウスにくっ付いたままになるので、on に releaseOutsideもつけれ ばいいと思ったが、そうするとマウスの外までドラッグした時に選択できなくなってしまうんですよね。
キャンバスの内側にしか移動できないようにすればreleaseOutsideをつけてもよさそうです。

しかし、そこはかとなくカクカクするんですが、、何故。


ドラッグできる範囲を制限するテスト /2kb

onClipEvent (enterFrame) {
	if (Math.floor(this._x) < 0) {
		this.stopDrag();
		this._x = 0;
	}
	if (Math.floor(this._x + this._width) > _root.canvas_size_x) {
		this.stopDrag();
		this._x = (_root.canvas_size_x - this._width);
	}
	if (Math.floor(this._y) < 0) {
		this.stopDrag();
		this._y = 0;
	}
	if (Math.floor(this._y + this._height) > _root.canvas_size_y) {
		this.stopDrag();
		this._y = (_root.canvas_size_y - this._height);
	}
}

という訳で、こんな事をしてみたわけですが、逆に扱いにくくなった気がします…。
なんかぎこちないしマウスにくっ付いてた方がまだ良いかも…。

やっぱカクカクしてますね…、座標表示が重いのかと思って余計な物全部取ってみたけど変わらないし。


位置補正だけをするテスト /2kb

位置補正だけしたらどうかしら?と考えてドロップを外した所、、
悲惨な事になってしまいました。
ブラウザに貼り付けて見た限りではそれほど判りませんが、ドロップしたまま範囲外に出てそのまま戻ってくると 離れた分だけ間がそのまま開いてしまうと言うような事に。
戻ってきた時に、位置補正しなおせば良いのだろうか。
めんどくさいのでこれはまたそのうちやろう。