3D ジャンプ処理について

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

3D ジャンプ処理について

#1

投稿記事 by kms » 15年前

質問させて頂きます。恐縮です。

VC++2008,DXライブラリを用いて3Dのジャンプ処理をしているのですが、
うまくいきません。
Y軸にジャンプ力を加算して、重力を追加したのですが、
コードの記述式が違うのか、はたまたもっと複雑なのか。

アドバイス頂けたら幸いです。 画像

MNS

Re:3D ジャンプ処理について

#2

投稿記事 by MNS » 15年前

何が、どう、うまくいかないのか詳しく説明してください。

kms

Re:3D ジャンプ処理について

#3

投稿記事 by kms » 15年前

えと、Cキーを押すと、原点(0,0,0)のモデルがY軸方向にジャンプし、
再度、原点に着地するプログラムを組みたいのですが、
何度コードを打ち込んでも、そのままモデルがY軸プラス方向に移動し続けるか、
もしくは、ちらっとジャンプしたかに見えると、そのままY軸のマイナス方向へと下がっていくか、
或いは、何も動作しないか、です。

softya

Re:3D ジャンプ処理について

#4

投稿記事 by softya » 15年前

ジャンプで使っている部分だけのコードだけでも見せてもらえませか?
2Dでも3Dでも重力加速度のプログラムに差はありません。

MNS

Re:3D ジャンプ処理について

#5

投稿記事 by MNS » 15年前

>そのままモデルがY軸プラス方向に移動し続けるか、
>もしくは、ちらっとジャンプしたかに見えると、そのままY軸のマイナス方向へと下がっていくか、
>或いは、何も動作しないか、です。

こんな不特定な動作が行われるとは思えないのですが、
少なくとも、
if ( CheckHitKey( KEY_INPUT_C ) == 1 )
{
    // ここにジャンプ処理を記述
    PlayerPosition.y += JumpPower;
    JumpPower -= Gravity ;
}
これでは、Cキーを押している間のみ、ジャンプの処理が行われることになります。
また、これで、Cキーを押し続けた場合、yの値は
0フレーム: 25.0 JumpPower= 20.0
1フレーム: 45.0 JumpPower= 15.0
2フレーム: 60.0 JumpPower= 10.0
3フレーム: 70.0 JumpPower= 5.0
4フレーム: 75.0 JumpPower= 0.0
5フレーム: 75.0 JumpPower= -5.0
6フレーム: 70.0 JumpPower=-10.0
7フレーム: 65.0 JumpPower=-15.0
8フレーム: 50.0 JumpPower=-20.0
9フレーム: 30.0 JumpPower=-25.0
10フレーム: 5.0 JumpPower=-30.0
11フレーム:-25.0 JumpPower=-35.0
12フレーム:-60.0 JumpPower=-40.0
 … … … … … …
このように、わずか11フレームで元の位置より下の場所に行ってしまうので、
重力の値を減少させるか、ジャンプ力を増加させる必要があるでしょう。

ちなみに、Cキーを押してない間でもジャンプをさせるには、

float 力 = 0.0f
bool ジャンプフラグ = false;



if(Cキーが押されている場合 かつ ジャンプフラグ == false)
{
力 = 適当な値(100とか50とか)
ジャンプフラグ = true;
}

if(プレイヤーのy > 0)
{
力 -= 重力
プレイヤーのy += 力
}
else
{
ジャンプフラグ = false;
}

こんな設計にするといいかもしれません。 画像

kms

Re:3D ジャンプ処理について

#6

投稿記事 by kms » 15年前

softya様、MNS様、お返事ありがとうございました。
なんとかジャンプ処理を成功させるに至りました。
助かりました。本当に有り難う御座います。

閉鎖

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