HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0405
マウスクリックで移動5解決


リンク

2007/4/5(Thu) 17:19:34|NO.7002

今2Dゲームを作っていて、その移動に関しての質問なんですが
マウスの左クリックでオブジェクトを選択し、
右クリックでクリックした場所に移動させようと思っています。
しかし、どのような命令を使えばいいのかがわかりません。
ヒントでもいいので教えてください。
お願いします。



この記事に返信する


jet-ball

リンク

2007/4/5(Thu) 18:13:14|NO.7006

「オブジェクト」の場所に移動させるんですか?
クリックしたところに移動させるんですか?



jet-ball

リンク

2007/4/5(Thu) 18:20:32|NO.7007

あ、すみません。私の読み違いでした。
えっと、じゃあヒントです

まずstick命令で左クリックを感知します
そのときのマウスの位置がどのオブジェクトの中にあるか調べます
そのオブジェクトの位置を変数に代入します
stick命令で右クリックを感知します
移動させるキャラクターの位置を先ほどの変数にあわせます

て流れになります(分かりにくかったらすみません)
使う命令といえば、stick,if位で大丈夫だと思います
オブジェクトが複数あるならdimとかも使う必要がありますが



Needle

リンク

2007/4/5(Thu) 20:26:26|NO.7014

「クリックした時にどのオブジェクトに重なってるかをどう調べるか」が一番問題だと思いますが
オブジェクトごとに位置の変数が在れば、クリック時のマウス座標がオブジェクトの内側に在るかどうか判るでしょう。



りさ

リンク

2007/4/5(Thu) 22:22:29|NO.7019

こんにちわ。

>どのような命令を使えばいいのかがわかりません。

マウスのクリックをずっと監視するためのループ、[repeat] [await] [loop]
マウスのクリックを判断するためのキー情報取得 [stick]
マウスのキー情報を調べるための [if] [else]

が最低限、必要ではないかと思います。

もし、オブジェクト(?)を描画するならば、[buffer] [gcopy] [redraw] [pos]
なども必要になってくると思います。

頑張ってください。

もし、どうしても分からなかったら、下のスクリプトを見てみてください。
簡単なサンプルです。

buffer 0 // 赤色に塗りつぶす color 255, 0, 0 :boxf buffer 1 // 黄色に塗りつぶす color 255, 255, 0 :boxf screen 2, 640, 480 // 画面を黒色に塗りつぶす color 0, 0, 0 :boxf objdx = 50 // オブジェクトの大きさ x サイズ objdy = 50 // オブジェクトの大きさ y サイズ objax = 0 // オブジェクトの左上 x 座標 objay = 0 // オブジェクトの左上 y 座標 flag = 1 // 状態フラグ [ 0:選択中(画面ID.0), 1:未選択(画面ID.1) ] repeat // 入力させる stick key // 左クリックなら if ( key == 256 ) { if (mousex >= objax)&(mousex <= objax+objdx)&(mousey >= objay)&(mousey <= objay+objdy) { // マウス座標がオブジェクト内にいる場合は選択状態にする flag = 0 } else { // マウス座標がオブジェクト内にいない場合は未選択状態にする flag = 1 } } else { // 右クリックで、選択状態なら if ( key == 512 ) & ( flag == 0 ) { objax = mousex - objdx / 2 // オブジェクトの中心をマウス x 座標へ objay = mousey - objdy / 2 // オブジェクトの中心をマウス y 座標へ flag = 1 // 未選択状態にする } } // フラグの状態が変更されたら if ( _flag != flag ) { _flag = flag // 新しいフラグを現在のフラグにする redraw 0 boxf // 一度、黒く塗りつぶす pos objax, objay // オブジェクトの位置 gcopy flag, 0, 0, objdx, objdy // オブジェクトの描画 redraw 1 } await 1 loop

参考になれば嬉しいです。

ただもし、オブジェクトというのが、ボタンなどのコントロールのことを指しているのであれば、
USER32.DLLのWindowFromPoint関数と、HSP標準命令のobjinfo関数を使うのも
いいのではないかと思います。
(WindowFromPoint関数については、過去ログにあると思います)



リンク

2007/4/5(Thu) 22:53:51|NO.7022

ありがとうございます。
がんばってみます。



ONION software Copyright 1997-2021(c) All rights reserved.