プログラミング初心者です、備忘録として書き記しておきます
プラグインはhgimg3
方針
カーソルをウィンドウ中央に固定し、ウィンドウ中央からのカーソル移動量をカメラ角度に加算・減算してあげる
注意点
mouse命令で設定する座標はディスプレイ上での座標なため、現在のウィンドウ位置、ウィンドウ枠の大きさを考慮して設定する必要がある
コード
視点操作のみのサンプル
y方向の視点角度を制限してないのでマウスを上下に動かし続けるととバク転・前転のような視点に…
FirstPerson.hsp
#include "hgimg3.as"
hgini
;カメラ初期位置、初期角度
selpos : objset3 0,-6,0
selcang : objset3r 0,0,0
;床作成
addmesh mdpl,32,32,16,512,512,2
regobj obpl,mdpl
;箱作成
setcolor 255,0,0
addbox mdbx,16,16
repeat 32
regobj obbx,mdbx
x=rnd(32) : z=rnd(32)
bx=x*16-(256-8) : bz=z*16-(256-8)
selpos obbx : objset3 bx,-6,bz
color
loop
;感度
sens=0.005
*main
winposx=ginfo(4) : winposy=ginfo(5) ;ウィンドウ左上位置
winw=ginfo(12) : winh=ginfo(11) ;ウィンドウ横幅・縦幅(枠あり)
winactw=ginfo(10) : winacth=ginfo(13);ウィンドウ横幅・縦幅(枠なし)
zureh=(winactw-winw)/2 ;サイドの枠の厚さ
zurev=(winh-winacth)-zureh ;上側のずれ
centerx=winposx+zureh+(winactw/2) ;マウス中央位置=ウィンドウ左上位置+枠サイズ+ウィンドウ幅/2
centery=winposy+zurev+(winacth/2)
x=mousex : z=mousey
mdx=winactw/2-x : mdz=winacth/2-z ;カーソル移動量観測
mouse centerx,centery ;カーソルを中央に固定
selcang : objgetfv angle ;カメラ角度に反映
angle(1)+=sens*mdx
angle(0)+=sens*mdz
objsetfv angle
hgdraw
hgsync 20
goto *main
その他
d3moduleを用いた一人称視点カメラの例:
http://hsp.tv/play/pforum.php?mode=pastwch&num=81890