ページ 11

ジャンプ処理の不具合

Posted: 2011年4月02日(土) 22:25
by kerotan0820
前回質問で、キャラクターのジャンプ(加減速なし)について、色々とご教示いただいたのですが、ただ上下に移動するだけではいくらなんでも違和感があったので、減速や加速を再現したいと思いました。

ぱっと考えたプログラムは右のとおりです

コード:

#include "DxLib.h"
 
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
 
 
 
    int x=320,y=448,flag=0,image[16],kagen;
    char Key[256];
 
    LoadDivGraph("char.png",16,4,4,32,32,image) ; //画像を分割してimage配列に保存
 
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
        //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
        if( Key[ KEY_INPUT_RETURN ]  == 1 ){ //エンターキーが押された
            flag=1;
		    kagen=20;
		}
        //ジャンプ上昇処理
        if(flag==1){//flagが1なら上昇
            if(y>=240){
                y-=kagen;
				kagen-=1;
            }else{
                flag=0; //flagを0に初期化 
            }
        }
        //ジャンプ下降処理
        if(flag==0){
            if(y<448){
                y+=kagen;
				kagen+=1;
            }
        }
 
        DrawGraph(x,y, image[10] , TRUE ) ;//画像を描画
 
        ScreenFlip();//裏画面を表画面に反映
 
    }
    WaitKey();
    DxLib_End();
    return 0 ;
}
Oneループごとにフレームごとの移動距離を縮めたり、伸ばしたりして速度を変化させようと思いました。
実際に挑戦したところ、するにはするのですが、画面から下に埋もれてしまったりします。
終いには画面から姿を消してしまいました…。

一体何が原因なのか考えてもわからなかったので、質問させていただきました。
ご教示いただけると幸いです。

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 00:00
by 海Sea
こんにちは!
ひとまずkerotan0820さんのコードを見て考えたのですが

コード:

 //ジャンプ下降処理
        if(flag==0){
            if(y<448){
                y+=kagen;
                kagen+=1;
            }

画面からキャラが下に埋もれるということが、
単純に、キャラが下に行き過ぎて表示画面からはみ出てしまうという事でしたら、
上の下降処理コードで最終的に、
キャラの現在Y座標=元のキャラのY座標
という代入を行ってみてはどうでしょうか?

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 00:18
by kerotan0820
海seaさん>>
こんにちは
回答ありがとうございます。

>>キャラの現在Y座標=元のキャラのY座標
これはどういう意味でしょうか><

それと、たんにはみ出るだけならよいのですが、ゆっくりと上昇しゆっくりきちんと下降してくれる時もあれば、勢い良く上がって勢い良く落ちてしまう時もあるんです。
画面から消えてしまうときはゆっくり上がってゆっくり降りてきたときに限ってです。
毎回同じパターンのバグが起きるのなら私ももう少し考えてみるのですが、毎度違う動作をするので一体何が不具合の原因なのか突き止められず困っております;

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 00:33
by kerotan0820
不具合の内容の気づいたことの追加
なんどもジャンプさせて動作の法則に気付けないか試していたところ気づいたことがあります。

1.最高到達地点(高さ)が毎度違う。
2.画面から消えてしまうのは、座標を無視して下に突っ切っている。(エンター連打したら帰ってきた)

どうか、バグの原因がわかる方、また、こうではないのだろうか、というちょっとした一言でも構いません、バグ解明につながるかもしれませんのでお気軽に回答をくださると非常に助かります。
回答の方よろしくお願いいたします。

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 01:58
by しひ
エンターキーを押している間、常に変数kagenに20を代入し続けているのでジャンプの減速が始まりません。
これが毎度最高到達点の異なる原因だと思います。

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 02:14
by kerotan0820
>>しひさん
ありがとうございます。
最高到達地点が変わる原因は納得しました。

その他バグは解決できそうですので、一旦質問保留させていただきます 
ありがとうございました。

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 02:19
by しひ
お役に立てたようで何よりです。
もう一つ、フラグは「静止・ジャンプ中」の二択ではなく、
「静止・上昇・下降」の三択にしたほうが良いかなって思います。

Re: ジャンプ処理の不具合

Posted: 2011年4月03日(日) 02:24
by kerotan0820
たしかにそうですね^^
修正します。
ありがとうございます