キャラの移動制御のところなのですが

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

キャラの移動制御のところなのですが

#1

投稿記事 by ffa » 13年前

9章のキャラの移動制御でスローはできましたがキャラが上と左だけボードの上に乗っかってしまい重なるような状態になってしまいます。
左と下はボードの少し手前でちゃんと止まるのですが・・・どこかおかしいでしょうか?

char.cpp

コード:

#include "../include/GV.h"

void calc_ch(){
        ch.cnt++;
        ch.img=(ch.cnt%24)/6;
}

void ch_move(){//キャラクタの移動制御
        int i;
		int sayu_flag=0;
		int joge_flag=0;
        double x,y,mx,my,naname=1;
        double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};//{左,右,下,上}のスピード
        int inputpad[4];
        inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
        inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);

        if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
                ch.img+=4*2;//画像を左向きに
        else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
                ch.img+=4*1;//画像を右向きに

        for(i=0;i<2;i++)//左右分
                if(inputpad[i]>0)//左右どちらかの入力があれば
                        sayu_flag=1;//左右入力フラグを立てる
        for(i=2;i<4;i++)//上下分
                if(inputpad[i]>0)//上下どちらかの入力があれば
                        joge_flag=1;//上下入力フラグを立てる
        if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
                naname=sqrt(2.0);//移動スピードを1/ルート2に

        for(int i=0;i<4;i++)//4方向分ループ
		{
                if(inputpad[i]>0)//i方向のキーボード、パッドどちらかの入力があれば
				{
                        x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
                        mx=move_x[i];   my=move_y[i];//移動分をmx,myに代入
                        if(CheckStatePad(configpad.slow)>0)//低速移動なら
						{
                                mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
                        }
                        x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
                        if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5))//計算結果移動可能範囲内なら
						{
                                ch.x=x , ch.y=y;//実際に移動させる
                        }
                }
        }
}

define.h

コード:

/フィールドの広さ
#define FIELD_MAX_X 384		//キャラの動ける領域の広さx軸
#define FIELD_MAX_Y 448		//キャラの動ける領域の広さy軸
//フィールドの左上の座標
#define FIELD_X 32			//その領域の左上のx座標
#define FIELD_Y 16			//その領域の左上のy座標
//パッドキーの最大数
#define PAD_MAX 17

#include "struct.h"		
		
load.cpp

コード:

#include "../include/GV.h"

//extern int img_ch[2][12];

void load()
{
	img_board[10] = LoadGraph("../dat/img/board/10.png");
	img_board[11] = LoadGraph("../dat/img/board/11.png");
	img_board[12] = LoadGraph("../dat/img/board/12.png");
	img_board[20] = LoadGraph("../dat/img/board/20.png");
    LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
教えてください。

nil
記事: 428
登録日時: 13年前

Re: キャラの移動制御のところなのですが

#2

投稿記事 by nil » 13年前

何故肝心の描画部を示してくださらないのですか?
2Dの場合描画された順番が遅いほど上に表示されます。

tutu
記事: 9
登録日時: 13年前

Re: キャラの移動制御のところなのですが

#3

投稿記事 by tutu » 13年前

char.cpp

コード:

#include "../include/GV.h"

void calc_ch(){
	ch.cnt++;
	ch.img=(ch.cnt%24)/6;
}

void ch_move(){
	int i,sayu_flag=0,joge_flag=0;
	double x,y,mx,my,naname=1;
	double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};
	int inputpad[4];
	inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
	inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);

	if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
		ch.img+=4*2;//画像を左向きに
	else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
		ch.img+=4*1;//画像を右向きに

	for(i=0;i<2;i++)//左右分
		if(inputpad[i]>0)//左右どちらかの入力があれば
			sayu_flag=1;//左右入力フラグを立てる
	for(i=2;i<4;i++)//上下分
		if(inputpad[i]>0)//上下どちらかの入力があれば
			joge_flag=1;//上下入力フラグを立てる
	if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
		naname=sqrt(2.0);//移動スピードを1/ルート2に

	for(int i=0;i<4;i++){//4方向分ループ
		if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
			x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
			mx=move_x[i];	my=move_y[i];//移動分をmx,myに代入
			if(CheckStatePad(configpad.slow)>0){//低速移動なら
				mx=move_x[i]/3;	my=move_y[i]/3;//移動スピードを1/3に
			}
			x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
			if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5)){//計算結果移動可能範囲内なら
				ch.x=x , ch.y=y;//実際に移動させる
			}
		}
	}
}
define.h

コード:

//フィールドの広さ
#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448
//フィールドの左上の座標
#define FIELD_X 32
#define FIELD_Y 16
//パッドキーの最大数
#define PAD_MAX 16

#include "struct.h"
load.cpp

コード:

#include "../include/GV.h"

void load(){
	img_board[10] = LoadGraph("../dat/img/board/10.png");
	img_board[11] = LoadGraph("../dat/img/board/11.png");
	img_board[12] = LoadGraph("../dat/img/board/12.png");
	img_board[20] = LoadGraph("../dat/img/board/20.png");
	LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
でどうでしょう。
(描画部は自分で何とかしてください)

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: キャラの移動制御のところなのですが

#4

投稿記事 by Dixq (管理人) » 13年前

graph.cppのgraph_main()は

コード:

void graph_main(){
	graph_ch();
	graph_board();
}
このようになっていますか?

graph_ch()の方が後になっていると、ボードよりキャラの方が上に表示されます。

閉鎖

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