かんたんな格闘ゲームを作成中ですが

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

かんたんな格闘ゲームを作成中ですが

#1

投稿記事 by ひよこ » 16年前

ひよこです。
今かんたんな格闘ゲームを作成中なんですが、デバックはうまくいっているのですが、実行中に
Aキーを押しても上へジャンプできないのですがどこが原因でしょうか。
#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        int PlayerX,PlayerY;
        PlayerY=280;
        int kyara[6];
        int img;
                char Key[256];
       
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
        kyara[0]= LoadGraph("KIRYU.bmp");
        kyara[1]= LoadGraph("KIRYU00.bmp");
        kyara[2]= LoadGraph("KIRYU2.bmp");
        kyara[3]= LoadGraph("KIRYU3.bmp");
        kyara[4]= LoadGraph("KIRYU4.bmp");
        kyara[5]= LoadGraph("KIRYU5.bmp");
        PlayerX  =320;
        int muki=5;
        int rakka;
        SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
       
            
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
        rakka=-1;
        PlayerY-= rakka ;// 落下処理
        if(PlayerY>280){PlayerY=280;rakka=0;}
        if(PlayerX<0){PlayerX=0;}
          
        if( Key[ KEY_INPUT_LEFT ]  == 1 ) { //左ボタンが押されたら
            PlayerX=PlayerX-2; muki=4;}         //左向きフラグを立てる
 
        if( Key[ KEY_INPUT_RIGHT]  == 1 ){  //右ボタンが押されたら
            PlayerX=PlayerX+2; muki=5; }        //右向きフラグを立てる
   
        if( Key[ KEY_INPUT_LEFT]== 1 &&  Key[ KEY_INPUT_Z]  == 1 ){
            muki=2;}
        if( Key[ KEY_INPUT_RIGHT]== 1 &&  Key[ KEY_INPUT_X]  == 1 ){
            muki=3;}
        if ((Key[KEY_INPUT_A]==1) && PlayerY == 280 ) { rakka=20;  muki=1;}
        img=kyara[(muki)];            //画像をセット
        ClearDrawScreen();
        DrawBox   (  0 ,  0 , 640 , 480 ,GetColor( 255 , 255 , 255 )  , TRUE) ;   // 四角形を描画
        DrawGraph( PlayerX , PlayerY , img , TRUE ) ;//画像を描画
 
        ScreenFlip();
    } 
 
 
    DxLib_End();
    return 0;
}

ランド

Re:かんたんな格闘ゲームを作成中ですが

#2

投稿記事 by ランド » 16年前

rakka = -1; ですが、 rakka -= 1;ではないでしょうか。

#PlayerYに関する部分である、rakkaとPlayerYの値を調べる(てっとり早く常に表示させました)と、rakkaの値の異変に気づけました。

ひよこ

Re:かんたんな格闘ゲームを作成中ですが

#3

投稿記事 by ひよこ » 16年前

rakkaはおちるスピードなので違うと思うのですが。
ご指摘どうりだとRuntime errorで無理です。

ランド

Re:かんたんな格闘ゲームを作成中ですが

#4

投稿記事 by ランド » 16年前

すみません、たしかに意味を考えると不自然ですね。考え直してみます。

kazuoni

Re:かんたんな格闘ゲームを作成中ですが

#5

投稿記事 by kazuoni » 16年前

現在のコードだと、
[A]を押す

rakka=20; muki=1;

rakka=-1;

PlayerY(280)-=-1→PlayerY=281

if文合致→PlayerY=280;rakka=0;
...

こんな感じです。Y座標を操作しているのは
[A]を押したときのみですので、何も変化は起こりません。

御津凪

Re:かんたんな格闘ゲームを作成中ですが

#6

投稿記事 by 御津凪 » 16年前

kazuoni さんの通り、毎回 rakka を -1 で初期化しているのが原因です。

落下処理を入力処理の後に移動すれば、一応ジャンプはするはずです。

# そうすると、一瞬で 20 ピクセル上に移動しますが。

ちなみにランドさんの方法で Runtime error が出たのは、
rakka を初期化せず、 いきなり rakka -= 1 を実行したためです。
事前に int rakka = 0; として初期化すればエラーにはならないはずです。

それと、 rakka -= 1 のほうが放物線を描けるように移動するのでその方がよいと思うのですが…。

ひよこ

Re:かんたんな格闘ゲームを作成中ですが

#7

投稿記事 by ひよこ » 16年前

以前のプログラムを見ていましたら最初が0と宣言されていました。そのあとー1にしたらうまくいきました。ランドさん、kazuoniさん答えてくださりありがとうございました。

kazuoni

Re:かんたんな格闘ゲームを作成中ですが

#8

投稿記事 by kazuoni » 16年前

>そうすると、一瞬で 20 ピクセル上に移動しますが。
こんな時に、「何のために使うんだっ」と思った
高校(?)で習う重力加速度が役立ちますね。

ひよこ

Re:かんたんな格闘ゲームを作成中ですが

#9

投稿記事 by ひよこ » 16年前

御津凪さん答えてくださりありがとうございました。

閉鎖

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