ドラッグしてみよう

さて、今回のお題は?

 クリックができたらドラッグ。
 当然ですね(ダブルクリックかもしれんけど)

 と言うわけで、今回はドラッグに挑戦。

ドラッグするぜー

 まず、適当なムービークリップのシンボルを作る。
 そのインスタンス(ステージ上のムービークリップ)を選択して、アクションパネルを開く。
 んで、次のように書く。

on (press) {
	this.startDrag();
}
on (release) {
	this.stopDrag();
}

 では、パブリッシュして実験。
 うひー、もうドラッグできた。書くことねぇっす。

 マウスボタンの押し下げるpress(HTではmouseDown)のイベントハンドラに、このインスタンスのドラッグをはじめますよー、と書いて、マウスボタンを離すrelease(HTではmouseUp)に、ドラッグをやめますよー、と書いただけ。

 後は、ドラッグをやめた時や、重なったときの処理を書いておけばいいだけだ。

衝突判定もやっておくかな

 思いのほか簡単だったので、衝突判定もやっておく。
 ドラッグと衝突判定ができれば、シューティングゲーム的なフラッシュが作れると言うスンポーである。
 シューティングにするなら、自機の移動はキーボードにするので、私は作らんけど。マウスにするにしても、ドラッグをそのまま使ったりはしない。
 ま、それはともかく衝突判定。

 衝突判定を行うには、インスタンス名を設定しておく必要がある。
 とりあえず、ドラッグするインスタンスが何か別の(インスタンス名をanotherObjとでもしておく)インスタンスにぶつかったら次のフレームへ、みたいなスクリプト。
 さっきのに追加しておく。

on (press) {
	this.startDrag();
}
on (release) {
	this.stopDrag();
}
onClipEvent (enterFrame) {
	if (this.hitTest(_root.anotherObj)) {
		gotoAndStop(2);
	} else {
		gotoAndStop(1);
	}
}

 とまぁ、こんな感じ。
 実行すると、あっさり成功。順調すぎるね。なぜだろう。
 答え:順調なところだけ公開しているからです。
 順調でない部分が何かうまくいったら追々公開するつもり。

 さて、hitTest()メソッドは、衝突判定するやつで、おおざっぱな矩形だけの衝突判定から、細かいオブジェクトの輪郭の判定までこなしてくれる、便利なやつだ。
 ちなみに、thisはデフォルトのオブジェクトなので、省略してもかまわない。
 実際、gotoAndStop()メソッドもthisに送っているが、省略している。
 この場合、thisはドラッグしているムービークリップなので、メインのムービーではなく、シンボルの方に1と2のフレームが無くちゃいけない。

本日の成果

drag.fla.zip(3Kbytes)

 今日はここまで。


2003-07-04