DirectXでC++を用いた3Dゲームのジャンプ処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
muscat

DirectXでC++を用いた3Dゲームのジャンプ処理について

#1

投稿記事 by muscat » 5年前

3Dゲームでジャンプ処理を書きたいのですが
今、このプログラムでボタンを押しても反応がないので、
どう修正すればいいか教えてほしいです。
playerPos.yが自キャラのy座標です。
Xを押したときXファイルのメッシュを
ジャンプさせたいです。

コード:

 float gravity=0.0f;
	 float power=0.0f;
	 bool jumpflg=false;
	
	 if (GetAsyncKeyState('X') & 0x8000&&jumpflg==false) {
		 power = 50.0f;
		 jumpflg = true;
	 }
	 if (playerPos.y > 0) {
		power -= gravity;
		playerPos.y += power;
	 }
	 else {
		 jumpflg = false;
	 }
 

アバター
usao
記事: 1887
登録日時: 11年前

Re: DirectXでC++を用いた3Dゲームのジャンプ処理について

#2

投稿記事 by usao » 5年前

せめて関数の単位の形でコードを提示できませんか.
その抜粋の仕方だと,最初の3行と,以降の条件分岐の処理の関係性が不明です.

少なくとも

コード:

void SumFunction()
{
  //ここに提示コードまるごと
}
みたいな形ではないのですよね?

で,それはそれとして,
「playerPos.yを変化させる処理が走るには,条件( playerPos.y>0 )を満たす必要がある」という点が
「鶏or卵」みたいな状態になっていたりしませんか?

littlestream
記事: 48
登録日時: 7年前

Re: DirectXでC++を用いた3Dゲームのジャンプ処理について

#3

投稿記事 by littlestream » 5年前

プチコンでデバッグしてたら全く動きませんでした。なのでヒントをいくつか紹介します。
(手軽に使えるし、いちいちc++でビルドするのも面倒なので)
まず、重力のGravityが0だと無重力になるので(ジャンプできるなら)
上に上がり続ける事でしょう。こちらではジャンプパワーを20.0、重力を0.5で良い感じになりました。
それから、正の数をジャンプのパワーとしてる以上、加算だと
下に下がってしまうと思いますが、これはプチコンと(DirectX)のY軸の座標系の違いでしょうね。
あと、ジャンプパワーを減算加算しているブロックのif文はジャンプフラグが立っていないと
正しく動きませんよ。地面より下にいったらジャンプフラグを下げてにしてかつ、プレイヤーキャラクターの
y座標を地面と同じ(くらい、というよりy座標の取り方で変わってくること)にしないと地面にめり込みますね。

返信

“C言語何でも質問掲示板” へ戻る