ページ 11

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

Posted: 2018年9月19日(水) 13:45
by muscat
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;
	 }
 

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

Posted: 2018年9月19日(水) 18:02
by usao
せめて関数の単位の形でコードを提示できませんか.
その抜粋の仕方だと,最初の3行と,以降の条件分岐の処理の関係性が不明です.

少なくとも

コード:

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

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

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

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