トップページ > 過去ログ > 記事閲覧
3Dシューティングゲームで弾を撃つには
名前:3D初心者 日時: 2009/11/24 18:54

キャラからある方向へ弾を発射させようとして、キャラから回転値を得てそれを 弾の方向に使ったら、変な方向に飛んでしまいました。 tmp = MV1GetRotationXYZ(player); tama.vec.x = tmp.x; tama.vec.y = tmp.y; tama.vec.z = tmp.z; tama.pos.x = tama.pos.x + tama.vec.x * tama.speed; tama.pos.y = tama.pos.y + tama.vec.y * tama.speed; tama.pos.z = tama.pos.z + tama.vec.z * tama.speed; 3Dシューティングゲームでの管理の仕方が悪いと思うのですが、正確に キャラの向いている方向に弾を発射させるにはどうしたらいいのですか? あと、できれば3Dシューティングゲームでの基本的な管理の仕方も教えて頂けると幸いです。

Page: 1 |

Re: 3Dシューティングゲームで弾を撃つには ( No.1 )
名前:sy(サイ) 日時:2009/11/24 19:39

基本的に2Dも3Dも考え方は同じです。 自機の移動ベクトルを正規化して単位ベクトルを出して、弾のスピードを掛けた値を弾の移動ベクトルにすればよいと思いますが? 方向 × スピード = 移動ベクトル その式だと正規化できてませんよ。単位ベクトルにスピードをかけるとうまくいくかと。
Re: 3Dシューティングゲームで弾を撃つには ( No.2 )
名前:3D初心者 日時:2009/11/27 20:30

正規化してもうまくいきませんでした。 それで、色々見直していたら自機を操作する部分がおかしいかなと思って また質問させていただきます。 #define RAD(c) ((PHI_F * (c)) / 180.0) // 初期値 MV1SetRotationXYZ( player, VGet( 0.0f, 0.0f, 1.0f ) ) ; //メインループ内 if( CheckHitKey( KEY_INPUT_NUMPAD6 ) == 1 ){ rx = rx + 1; if(rx > 360){rx=0;}} if( CheckHitKey( KEY_INPUT_NUMPAD4 ) == 1 ){ rx = rx - 1; if(rx < 0){rx=360;}} if( CheckHitKey( KEY_INPUT_NUMPAD8 ) == 1 ){ ry = ry + 1; if(ry > 360){ry=0;}} if( CheckHitKey( KEY_INPUT_NUMPAD2 ) == 1 ){ ry = ry - 1; if(ry < 0){ry=360;}} MV1SetRotationXYZ( player,VGet(RAD(ry),RAD(rx),0.0f)); //ここの部分 キーボードからはX軸とY軸で回転操作ができますが、残りのZ軸はどうしたらいいか という部分で悩んでいます。 簡単なフライトシミュレータみたいなものを実現できたらいいなと思っています。
Re: 3Dシューティングゲームで弾を撃つには ( No.3 )
名前:3D初心者 日時:2009/11/27 20:34

あと、すみませんが複雑な回転をさせようとしたら MV1SetRotationXYZ ではなく行列で処理していった方がいいのですか? クォータニオンを使用する方法もありますが、そういう関数 が見あたらなかったので自作するしかないのでしょうか?
Re: 3Dシューティングゲームで弾を撃つには ( No.4 )
名前:sy(サイ) 日時:2009/11/27 21:45

うまくいかなかったとありますが、どのように改良したのかが分からなければアドバイスのしようがありません。 そして一個目の質問が解決する前に、別の質問するのは最低限のマナーとして、控えたほうが良いかもです。 質問を質問で返すようで申しわけないですが、 複雑な回転とは一体どのような回転をしようとしているのでしょうか? MV1SetRotationXYZ( player,VGet(RAD(ry),RAD(rx),0.0f)); //ここの部分 この部分すべてが謎です… ラジアン(?)のようなものからベクトル算出してるように思えますがこれは一体何なのでしょうか… XとYの回転量から進行方向を求めるのなら行列使った方が良いと思います。 クオータニオンは僕も知らない分野で、知ってたら便利かもしれませんが、初心者の方には行列の方が良いと思われます。 因みにこのライブラリは、右手座標系です。
Re: 3Dシューティングゲームで弾を撃つには ( No.5 )
名前:いっち 日時:2009/11/27 22:40

3Dオブジェクトの移動に関しては管理人さんご提供のサンプルプログラムが参考になると思います。 (私にはこれ以上の解説はできません) ttp://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html それと、質問する際は部分的なソースではなくコンパイル可能なソース(全文ではなく抽出したもの)を 掲載したほうが相談に乗ってもらいやすいと思います。
Re: 3Dシューティングゲームで弾を撃つには ( No.6 )
名前:3D初心者 日時:2009/11/28 09:59

質問の内容をまとめられなくてすみません。 アクションゲームのサンプルを参考にしながら シンプルな行列で再挑戦してみます。 色々ありがとうございました。

Page: 1 |