教えてください

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

教えてください

#1

投稿記事 by お願いします » 15年前

今、「c言語わくわくゲームプログラミング教室」という本で勉強しています。
そこで、本のコードを改造しています。
以下のコードは、自キャラの動きの部分です。(みにくくてすいません)
//メインループ
void MyMain(){
    Vector curvec1 = {0,0} ;

    int Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
    if( Key & PAD_INPUT_LEFT ){
        curvec1 = AddVector( curvec1, LEFTMOVEC );
        g_direction = DIRECTIN_LEFT;
    }
    if( Key & PAD_INPUT_RIGHT ){
        curvec1 = AddVector( curvec1, RIGHTMOVEC );
        g_direction = DIRECTION_RIGHT;
    }

    //地面との当たり判定
    BOOL ontheground = FALSE; //着地フラグ
    if ( g_jikipos.y > 399 ){
        ontheground = TRUE;
        g_nowjumping = FALSE;
        g_jikivector.x = 0;
        g_jikivector.y = 0;
    }

    if( Key & PAD_INPUT_A ){
        curvec1 = AddVector( curvec1, JUMPMOVEC );
        g_nowjumping = TRUE;
    }

    //自キャラ座標の計算
    if ( ontheground == TRUE ){
                //接地時
        g_jikivector = AddVector( g_jikivector, curvec1 );
    } else {
        //ジャンプ中
        g_jikivector = AddVectorInFrameTime( g_jikivector, GRAVITY );
        if(g_jikivector.y > 400) g_jikivector.y = 400;
    }
    g_jikipos = AddVectorInFrameTime( g_jikipos, g_jikivector );
    //自キャラの描画
    if ( (ontheground == TRUE) && (g_nowjumping == FALSE) ){
        if ( fabs(curvec1.x) > ZEROVALUE ){
            //走る
            DrawAnimation( g_jikipos.x,g_jikipos.y, 1, 0.3, g_direction,
                &g_jikiimage[2], 6, 12);
        } else {
            //停止状態
            DrawAnimation( g_jikipos.x,g_jikipos.y, 1, 0 , g_direction,
                &g_jikiimage[0],1, 12 );
        }
    } else {
        //ジャンプ状態
        if ( fabs(g_jikivector.x) < ZEROVALUE ){
            DrawAnimation( g_jikipos.x,g_jikipos.y, 1, 0, g_direction,
                &g_jikiimage[8],1, 12 );
        } else {
            DrawAnimation( g_jikipos.x,g_jikipos.y, 1, 0, g_direction,
                &g_jikiimage[9],1, 12);
        }
    }
}
このコードを実行すると、ジャンプ中に左右の移動ができなくなります。
接地している時と同じように、空中でも左右に動けるようにはできませんか?
お願いします。

MNS

Re:教えてください

#2

投稿記事 by MNS » 15年前

中身がわからない関数がいくつかあるので、あまり自信はありませんが
//自キャラ座標の計算
    if ( ontheground == TRUE ){
                //接地時
        g_jikivector = AddVector( g_jikivector, curvec1 );
    } else {
        //ジャンプ中
        g_jikivector = AddVectorInFrameTime( g_jikivector, GRAVITY );
        if(g_jikivector.y > 400) g_jikivector.y = 400;
    }
この部分を
//自キャラ座標の計算
    if ( ontheground == FALSE ){
        //ジャンプ中
        g_jikivector = AddVectorInFrameTime( g_jikivector, GRAVITY );
        if(g_jikivector.y > 400) g_jikivector.y = 400;
    }
    g_jikivector = AddVector( g_jikivector, curvec1 );
こうしたらどうでしょう?

初心者

Re:教えてください

#3

投稿記事 by 初心者 » 15年前

返信遅れてすいません。
早速やってみたいと思います。

閉鎖

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