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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0301
catsマウスでカメラ回転(Easy3d)10解決


cats

リンク

2014/3/1(Sat) 15:28:46|NO.60351

マウスでカメラを回転、WASDキーで前後左右に移動、という動きを
easy3dでしたいと思っています。
マウスでカメラを回転させる処理がうまくいかないのと、
左右の動き方がわかりません。

以下がおおまかな処理です。
WASDキーで移動します。(左右の動き方わからず)

E3DGetKeyboardState keybuf ;キーチェック if keybuf('W') = 1 : E3DPosForward player, 1 if keybuf('S') = 1 : E3DPosForward player, -1
マウスに合わせてカメラとプレイヤーを回転させます

if mx!=ginfo(0) | my!=ginfo(1){ addcx=double(mx-ginfo(0))*0.1 addcy=double(my-ginfo(1))*0.1 }else{ addcx=0.0 : addcy=0.0 : addcz=0.0 mouse ginfo(20)/2,ginfo(21)/2 } E3DCameraDirLeft addcx,1 : E3DCameraDirUp addcy,1 E3DGetDirQ2 player, qid1 E3DRotateQLocalY qid1 ,-addcx E3DSetDirQ2 player, qid1 mx=ginfo(0) : my=ginfo(1)
カメラをプレイヤーの座標に移動します。

E3DGetPos player, saveposx4, saveposy4, saveposz4 E3DSetCameraPos saveposx4, saveposy4 + 50.0, saveposz4
プレイヤーが移動すると勝手にカメラの向きが変わるといった
挙動が見られます。
どなたかご教授をお願いします。



この記事に返信する


自給自足

リンク

2014/3/1(Sat) 18:34:09|NO.60364

カメラを回転させるではなく カメラの視点を回転では?


http://easy3d.wikiwiki.jp/

easy3d wiki中のサンプルリンク

「キー入力による操作」

を参考にしてみては?



cats

リンク

2014/3/1(Sat) 20:51:10|NO.60370

>自給自足さん
ありがとうございます。
サンプルを参考にして

E3DGetKeyboardState keybuf ;キーチェック if keybuf('W') = 1 : E3DCameraPosForward 1 ;矢印上 if keybuf('S') = 1 : E3DCameraPosForward -1 ;矢印下 if mx!=ginfo(0) | my!=ginfo(1){ addcx+=double(mx-ginfo(0))*0.1 ;前回のマウス座標(mx,my)から現在のマウス座標を引いて適当に何百分の一ぐらいにする addcy+=double(my-ginfo(1))*0.1 }else{ ;addcx2=0.0 : addcy2=0.0 : addcz2=0.0 mouse ginfo(20)/2,ginfo(21)/2 } E3DSetCameraDeg addcx,addcy mx=ginfo(0) : my=ginfo(1)
という風にしました。
以前は自機オブジェクト(player)を移動してカメラがついていく形だったので
マウスによる視点の移動はできるようになりました。
しかし、視点が下を向くとカメラが下へも移動してしまいます。(E3DCameraPosForward)
また、左右への移動の仕方もわかりません。
質問続きで申し訳ありませんが、何が対応方法はないでしょうか。



自給自足

リンク

2014/3/1(Sat) 22:58:43|NO.60372

>マウスでカメラを回転、WASDキーで前後左右に移動、という動きを

FPSのようにカメラ(視点)移動させたいのかな?
そのためには
まずはモデルの移動から 

if keybuf('W') = 1 : E3DPosForward player, 100.0 ;1だと値が小さすぎるあと実数(小数点)ね
if keybuf('S') = 1 : E3DPosForward player, -100.0;モデルの向きは変らず後ろに下がる
if keybuf('A') = 1 : E3DRotateY player, 10.0 ;モデルを旋回
if keybuf('D') = 1 : E3DRotateY player, -10.0 ;

;これでモデルが座標をカメラの座標に
E3DGetPos player, saveposx4, saveposy4, saveposz4
E3DSetCameraPos saveposx4, saveposy4 , saveposz4

;次にカメラだが
;三角関数(サイン、コサイン)が必要
;これは 確かeasy3dのサンプルの中に入っていたはず
;e3dlookatq.hspを参考に camdegxzがx slimedegyがy



自給自足

リンク

2014/3/1(Sat) 23:02:09|NO.60373

訂正
;これでモデルが座標をカメラの座標に
ではなく
;これでモデル座標がカメラの座標に



cats

リンク

2014/3/1(Sat) 23:43:29|NO.60377

>自給自足さん
ありがとうございます。
カメラ視点と自機の前後移動はできるようになりました。
ただ左右(自機の前方向に対して直角方向)に移動する方法がわかりません。
もともとhgimg3で作っていたのですが、
その時はaddposで自機の向きに±90度(ラジアン)を足して移動していました。

getang player ,tmp ,ANG_Y ,tmp ;ANG_Yを使用する ANG_Y-=deg2rad(90) ;自機の向きから90度マイナス x=sin(ANG_Y)*-MV_ : z=cos(ANG_Y)*-MV_ ;_MV(移動量)の分をかける addpos player ,x ,0 ,z ;移動



cats

リンク

2014/3/2(Sun) 00:25:27|NO.60387

すみません。
やっぱりいろいろ動きが変になりました。
とりあえず現状をアップロードしておきます。
http://ux.getuploader.com/for_test_up/download/2/Easy3d.zip



自給自足

リンク

2014/3/2(Sun) 02:32:57|NO.60389

onexit gosub *bye ;終了割り込み
;gosub でなく goto かと


sdim mediadir, 2048;メモリ確保してあるので
;(boxモデルだと向きが分からないかと)
mediadir = dir_cur + "\\etc\\jiki.mqo"
E3DLoadMQOFileAsChara mediadir ,1.0 ,player ,0


E3DGetKeyboardState keybuf ;キーチェック
;↓追加でESCキーで終了
if keybuf(VK_ESCAPE ) = 1 : goto *bye

;この2行を *MovCamに移動してください
E3DSetCameraDeg addcx,addcy
E3DRotateY player ,-addcx2

;mouseへの座標代入は無効に
else{
; mouse ginfo(20)/2,ginfo(21)/2
}

ところで なに風のゲーム?例を上げてもらわないと



cats

リンク

2014/3/2(Sun) 08:51:01|NO.60391

>;gosub でなく goto かと
終了確認画面を付ける予定だったのでgosubのままでした><
とりあえずその通りにやってみました。
視点をいろいろと変えるとずれてくる(?)のは気のせいか環境のせいなのかな。

>ところで なに風のゲーム?例を上げてもらわないと
一人称視点のホラーゲームです。
例えば、Slenderとかの探索型のゲームです。
自機の操作は一般的なFPSと同じです。



自給自足

リンク

2014/3/2(Sun) 09:19:48|NO.60392

個人的に修正できそうなところ修正

http://ux.getuploader.com/xhspx/download/1/jkjsEasy3d.lzh

マウスの怪しい動きはなくなってるはずだが
視界の稼働範囲が狭すぎるし 視点が元に戻せないのね

Slender
すまぬやったことがない 実況動画を見てみます



cats

リンク

2014/3/2(Sun) 09:35:26|NO.60393

>自給自足さん
わざわざ作ってくださりありがとうございます!
動かしたところ目指していた動きにかなり近い動作をしてくれました。
これで制作が進みます。
本当にありがとうございました。



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