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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0928
YN3HGIMG3とDIPSW (HSP33RC1)3解決


YN3

リンク

2011/9/28(Wed) 20:09:02|NO.41796

現在、マウスで操作するHGIMG3を使った3Dゲームを作っております。
マウスの横移動でカメラの向きが変わる、いわゆるファーストパーソンシューター式の操作です。

マウスの移動量を検出するのに、mouse命令とginfoを駆使して毎フレームごとに
マウスカーソル位置をmouse x,yで強制的にウィンドウの中央に戻して、mouse -1でカーソルを消し、
それからのマウスカーソルの移動量をginfoで検出する方法を行っておりました。
これでも、今のところなんとか実現できてますが、ウィンドウのサイズの都合、毎フレームの
カウント量が300程度しか取れず、また、mouseオンオフを繰り返すので、稀にカーソルがチラついて見えることもあります。

マウスからハードウェア的なX軸の量が読み取れれば、ものすごくスマートでシンプルなコードにできるのですが・・・

と思っていた矢先、DIPSWというドンピシャなプラグインを見つけました。
しかし、自分のゲームに組み込んでみたところ、HGIMG3の初期設定の段階でエラーが出ます。

とりあえず

#include "hgimg3.as"
#include "dipsw.as"

hgsetreq SYSREQ_MAXOBJ,1000 ;最大オブジェ量
hgsetreq SYSREQ_3DFILTER,1
hgsetreq SYSREQ_2DFILTER,1

hgini
dip_ini

dip_bye
hgbye

この段階でhgsetreqが「エラー16・パラメーターの数が多すぎます」で引っかかります。

私の環境が悪いのか、それとも、HSP33RC1との相性が悪いのか・・・よくわかりません。
それともマイクロソフトが最近言うように、DirectInputで直にマウスを読み取るな!ということのなのか・・・
みなさんの環境ではこのエラーは出ますか?



この記事に返信する


ザーメン

リンク

2011/9/28(Wed) 20:46:32|NO.41799

WindowAPIのShowCursorだっけ?をつかえばちらつかないで消せるはずです。
そちらをまずは「ためしてみては?



YN3

リンク

2011/9/28(Wed) 21:52:40|NO.41801

ザーメンさん、レスありがとうございます。
ためしにちょっとした確認用スクリプトを書いてみました。


#uselib "user32" #func ShowCursor "ShowCursor" int bgscr 0,640,480,0,0,0 ShowCursor 0 *main mouse 320,240 wait 10 x = ginfo(0) y = ginfo(1) redraw 0 color 0,0,0 boxf color 255,255,255 pos 0,0 mes x mes y redraw 1 stick k if k&128 : end goto *main

おお!何度Mouse命令を使ってもカーソルが復活しません!
しかもHSPのウィンドウ上のみ消えるのですね。便利です。
(クリップカーソルのやり方は以前に教えていただいたので大丈夫です。)
初めて、自力で外部関数の呼び出しをやってみました。
なんとか無事に結果がでましたが、本当にこの記述でよかったのかな?と思ってます。
HSPでBOOL型ってどう表現するの!?とか最初、迷いました・・・。
ちなみに 引数は省略か0でカーソルが消え、1だと消えないようです。

とりあえず、これでマウスカーソルの心配はなくなりました。
ありがとうございます!



YN3

リンク

2011/11/18(Fri) 18:59:00|NO.43100

すみません、解決のチェックをわすれていました><



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