だいたいこんなかんじで。
マウスの反応が敏感すぎたり、上下にくるっと回ると、左右が反転してしまったりと、
ツッコミどころは満載だけど、とっかかりになれば幸い。
// マウスで視点を動かそう
#include "hgimg3.as"
screen 0,640,480:cls 4
hgini
;デフォルトでは暗いので、チト明るくする
setdir HGOBJ_LIGHT,100,100,100
;動きがわかりやすいように、柱を60本ほど立てておく
setcolor 200,200,200
addbox mdlBOX,5,2
dim objBOX,60
repeat 60
regobj objBOX(cnt),mdlBOX
setpos objBOX(cnt),25-rnd(50),0,25-rnd(50)
loop
setpos HGOBJ_CAMERA,0,0,0
*MLP
;前回のマウス座標と、今のマウス座標を比較して、
;マウスがどちらに動いたか調べる。
;動いた方向によって、カメラを右に向かせたり、左に向かせたりする。
mx=mousex
if oldmx-mx>0:addang HGOBJ_CAMERA,0, 0.1 ,0 ;カメラをY軸で回せば、右を向いたり
if oldmx-mx<0:addang HGOBJ_CAMERA,0, -0.1 ,0 ;右を向いたりする
oldmx=mx
;上下の向きも、同様に。
my=mousey
if oldmy-my>0:addang HGOBJ_CAMERA, 0.1 ,0,0 ;X軸で回せば、上を向いたり
if oldmy-my<0:addang HGOBJ_CAMERA,-0.1 ,0,0 ;下を向いたりする
oldmy=my
;おまけ
;カーソルの上下で前進、後退
stick st,2+8
if st=2{ ;前進
getang HGOBJ_CAMERA,tmp,ANG_Y,tmp ;Y軸の角度を調べて、
x=sin(ANG_Y)*-1 ;X軸方向の移動量と
z=cos(ANG_Y)*-1 ;Z軸方向の移動量を出す。
addpos HGOBJ_CAMERA,x,0,z ;(-1の値を変えることで、スピードが変わる)
}
if st=8{ ;後退
getang HGOBJ_CAMERA,tmp,ANG_Y,tmp
x=sin(ANG_Y)*1
z=cos(ANG_Y)*1
addpos HGOBJ_CAMERA,x,0,z
}
;描画
hgdraw
hgsync 20
goto *MLP