ページ 11

キャラを一区間歩かせるについて

Posted: 2011年8月18日(木) 17:52
by OP
ちょっと質問したいところがあります。キャラを一区間歩かせるについてなんですが、私は今勉強中の初心者です。質問はゲームプログラミングの館で
見たコードで違う画像とかで遊んでたんですが、キャラを一区間歩かせるのところでそこのコードを違うコードを書くところに貼ってみたんです。
そしたらなぜかキャラが映んなくて困ってしまいましてそれで質問しました。そのコードが↓です。

コード:


#include "DxLib.h"
 
typedef struct{
        int x,y,img,muki,walking_flag;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
        int image[16];
        char Key[256];
        ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
        ch.x    =320;
        ch.y    =160;
        ch.walking_flag=0;
        ch.muki=3;
 
        SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
        LoadDivGraph( "画像/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
        if(ch.x%32==0 && ch.y%32==0){         //座標が32で割り切れたら入力可能
            ch.walking_flag=1;         //歩くフラグを立てる。
            if     ( Key[ KEY_INPUT_UP   ]  == 1 )  //上ボタンが押されたら
                    ch.muki=0;         //上向きフラグを立てる
            else if( Key[ KEY_INPUT_LEFT ]  == 1 )  //左ボタンが押されたら
                    ch.muki=1;         //左向きフラグを立てる
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )  //下ボタンが押されたら
                    ch.muki=2;         //下向きフラグを立てる
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )  //右ボタンが押されたら
                    ch.muki=3;         //右向きフラグを立てる
            else                                    //何のボタンも押されてなかったら
                    ch.walking_flag=0; //歩かないフラグを立てる
        }
 
        if(ch.walking_flag==1){        //歩くフラグが立っていたら
            if     (ch.muki==0)        //上向きならch.y座標を減らす
                    ch.y--;
            else if(ch.muki==1)        //左向きならch.x座標を減らす
                    ch.x--;
            else if(ch.muki==2)        //下向きならch.y座標を増やす
                    ch.y++;
            else if(ch.muki==3)        //右向きならch.x座標を増やす
                    ch.x++;
        }
 
        ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];            //画像をセット
 
        DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
 
        ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();
    return 0;
}
どこが間違ってるのかさえわからなくて困っています。
あと[(ch.x%32+ch.y%32)/8 + ch.muki*4];
ここもよくわからなくなってしまいました。初心者なので説明できる人がいましたら返信お願いします。

Re: キャラを一区間歩かせるについて

Posted: 2011年8月18日(木) 18:46
by Dixq (管理人)
画像が映らないなら、まず、画像が正常にロード出来ているか確認して下さい。
printfDxするなり、ブレイクポイントを貼るなりして、
LoadDivGraph後に格納されたimageの値を確認して下さい。
ソースコードがサンプルと全く同じなのであれば、画像が読み込めていないとしか考えられないです。
表示する配列要素を決める計算式については、その一つ前の章から順番に読めば分かると思います。

Re: キャラを一区間歩かせるについて

Posted: 2011年8月18日(木) 18:48
by OP
わかりました!やってみます。