クリックができたらドラッグ。
当然ですね(ダブルクリックかもしれんけど)
と言うわけで、今回はドラッグに挑戦。
まず、適当なムービークリップのシンボルを作る。
そのインスタンス(ステージ上のムービークリップ)を選択して、アクションパネルを開く。
んで、次のように書く。
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