ページ 11

教えてください

Posted: 2009年12月21日(月) 22:12
by お願いします
今、「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);
        }
    }
}
このコードを実行すると、ジャンプ中に左右の移動ができなくなります。
接地している時と同じように、空中でも左右に動けるようにはできませんか?
お願いします。

Re:教えてください

Posted: 2009年12月21日(月) 22:21
by MNS
中身がわからない関数がいくつかあるので、あまり自信はありませんが
//自キャラ座標の計算
    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:教えてください

Posted: 2009年12月27日(日) 01:48
by 初心者
返信遅れてすいません。
早速やってみたいと思います。