こんにちはDimeWBです。
HGIMG3を使ってFPS(一人称の3Dシューティングゲーム)を作っています。
ここの過去ログを参照にマウスによるカメラ制御、前進と後進が出来ました。
しかし左右に移動だけがまったく出来ません。
色々試しましたけど出来ませんでした。
自分ではどこが間違っているのか、調べてもまったく分かりません。
どなたか、教えて下さい。よろしくお願いします。
/******* ここから *******/
#include "hgimg3.as"
;////////////////////////////////////
; 初期設定
;////////////////////////////////////
#define sX 640 ;クライアントエリアxサイズ
#define sY 480 ;クライアントエリアyサイズ
pi = atan(1,0) * 2
;///////////////////////////////////
; ウインドウ初期化
;///////////////////////////////////
screen 0, sX, sY, 0
title "機械生命体-ラ・テーツ-"
;///////////////////////////////////
; hgimg3初期化
;///////////////////////////////////
hgini
clscolor $00FFFF
;///////////////////////////////////
; フォント初期化
;///////////////////////////////////
setfont 16, 16, 12, 1
texload dir_exe + "\\sample\\hgimg3\\fontchr.bmp"
setuv 0, 0, 122, 127
;///////////////////////////////////
; カメラ初期化
;///////////////////////////////////
addpos HGOBJ_CAMERA, 0.0, -10.0, 0.0
;//////////////////////////////////
; モデル初期化
;/////////////////////////////////
addxfile m_xmodel , "robot_action.x" ; モデルを読み込む
modelshade m_xmodel, 2
regobj xobj, m_xmodel
addpos xobj, 0.0, -5.0, 0.0
;//////////////////////////////////
; 地形モデル初期化
;/////////////////////////////////
addmesh bgmod, 1, 1, 0, 100, 100
texload dir_exe + "\\sample\\hgimg3\\btex.bmp"
regobj bgobj, bgmod
*main
; 描画メイン
hgdraw ; 描画処理
getang HGOBJ_CAMERA, cx, cy, cz
fprt "cx("+strf("% 8.3f",(cx/pi)*180)+" )"+" cy("+strf("% 8.3f",((cy/pi)*180))+" )"+pi,8,8
fprt "addcx("+strf("% 8.3f",((addcx/pi)*180))+" )"+" addcy("+strf("% 8.3f",((addcy/pi)*180))+" )",8,32
getang xobj, cx, cy, cz
fprt "ANG_X:"+cx+ " ANG_Y:"+cy+ " ANG_Z"+cx, 8, 58
hgsync 10 ; 時間待ち
stick k, $3ff ;キー入力状態取得
if k&128 :goto *exitpos ;ESCキーが押されていたら終了
if K&256 { ;左クリックが押されていたら
addcy = double(mx-mousex) * 0.005 ;前回のマウス座標(mx,my)から現在のマウス座標を引いて適当に何百分の一ぐらいにする
addcx = double(my-mousey) * 0.008
}else{
addcx = 0.0
addcy = 0.0
addcz = 0.0
}
mx = mousex
my = mousey
stick st, 1+2+4+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 : addpos xobj, x, 0, z ;(-1の値を変えることで、スピードが変わる)
}
if st&8 { ;後退
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 : addpos xobj, x, 0, z ;(-1の値を変えることで、スピードが変わる)
}
if st&4 { ;右
getang HGOBJ_CAMERA, tmp, ANG_Y, tmp ;Y軸の角度を調べて、
x = cos(ANG_Y * (pi/180) ) * 1 ;X軸方向の移動量と
z = sin(ANG_Y * (pi/180) ) * 1 ;Z軸方向の移動量を出す。
addpos HGOBJ_CAMERA, x, 0, z : addpos xobj, x, 0, z ;(-1の値を変えることで、スピードが変わる)
}
if st&1 { ;左
getang HGOBJ_CAMERA, tmp, ANG_Y, tmp
x = cos(ANG_Y * (pi/180) ) * -1 ;X軸方向の移動量と
z = sin(ANG_X * (pi/180) ) * -1 ;Z軸方向の移動量を出す。
addpos HGOBJ_CAMERA, x, 0, z : addpos xobj, x, 0, z ;(-1の値を変えることで、スピードが変わる)
}
addang HGOBJ_CAMERA, addcx, addcy, addcz
addang xobj, addcx, addcy, addcz ;現在のカメラアングルにマウスによる回転量を加算
goto *main
*exitpos
hgbye
end
/******* ここまで *******/