ページ 1 / 1
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座標の取り方で変わってくること)にしないと地面にめり込みますね。