ジャンプ処理の不具合

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

ジャンプ処理の不具合

#1

投稿記事 by kerotan0820 » 13年前

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

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

コード:

#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ループごとにフレームごとの移動距離を縮めたり、伸ばしたりして速度を変化させようと思いました。
実際に挑戦したところ、するにはするのですが、画面から下に埋もれてしまったりします。
終いには画面から姿を消してしまいました…。

一体何が原因なのか考えてもわからなかったので、質問させていただきました。
ご教示いただけると幸いです。
けろけろにゃー (」・ω・)」うー!

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

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

#2

投稿記事 by 海Sea » 13年前

こんにちは!
ひとまずkerotan0820さんのコードを見て考えたのですが

コード:

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

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

アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

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

#3

投稿記事 by kerotan0820 » 13年前

海seaさん>>
こんにちは
回答ありがとうございます。

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

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

アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

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

#4

投稿記事 by kerotan0820 » 13年前

不具合の内容の気づいたことの追加
なんどもジャンプさせて動作の法則に気付けないか試していたところ気づいたことがあります。

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

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

しひ

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

#5

投稿記事 by しひ » 13年前

エンターキーを押している間、常に変数kagenに20を代入し続けているのでジャンプの減速が始まりません。
これが毎度最高到達点の異なる原因だと思います。

アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

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

#6

投稿記事 by kerotan0820 » 13年前

>>しひさん
ありがとうございます。
最高到達地点が変わる原因は納得しました。

その他バグは解決できそうですので、一旦質問保留させていただきます 
ありがとうございました。
けろけろにゃー (」・ω・)」うー!

しひ

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

#7

投稿記事 by しひ » 13年前

お役に立てたようで何よりです。
もう一つ、フラグは「静止・ジャンプ中」の二択ではなく、
「静止・上昇・下降」の三択にしたほうが良いかなって思います。

アバター
kerotan0820
記事: 91
登録日時: 13年前
住所: 東京都
連絡を取る:

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

#8

投稿記事 by kerotan0820 » 13年前

たしかにそうですね^^
修正します。
ありがとうございます
けろけろにゃー (」・ω・)」うー!

閉鎖

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