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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0611
DimeWB左右に移動2解決


DimeWB

リンク

2008/6/11(Wed) 09:46:44|NO.16656

こんにちは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

/******* ここまで *******/



この記事に返信する


SYAM

リンク

2008/6/11(Wed) 10:28:23|NO.16657

xとzの計算式の間違いです
以下の手順で考えてみましょう
?左右の計算式をとりあえず『前進』と同じにする
?進行方向(ANG_Y)を90度足したり引いたりする
これだけです。
こう考えると、sinと cosを入れ替えたり-1を掛けたりする必要はなさそうですよね。
ANG_Xの出番もありません:-)
そして、 90度は pi/180 ではないことにも注意してください。



DimeWB

リンク

2008/6/11(Wed) 18:23:43|NO.16661

>>xとzの計算式の間違いです
>>?左右の計算式をとりあえず『前進』と同じにする
>>?進行方向(ANG_Y)を90度足したり引いたりする
>>そして、 90度は pi/180 ではないことにも注意してください。
x = cos(ANG_Y * (pi/180) ) * 1 ;X軸方向の移動量と
z = sin(ANG_Y * (pi/180) ) * 1 ;Z軸方向の移動量を出す。

ここを言われたとおりに、

x = sin(ANG_Y + pi/2 ) ;X軸方向の移動量と
z = cos(ANG_Y + pi/2 ) ;Z軸方向の移動量を出す。

すれば動きました。意外とシンプルですね^^
もっと難しい計算とかするのかと思いました。
SYAMさん、どうもありがとうございました。
お陰さまで解決しました。



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