初心者です
Posted: 2011年5月06日(金) 22:52
今DXライブラリとBox2Dを使ってゲームを作っているのですが、画像をうまく表示させたいところに別の画像が表示されてしまったりして困っています。
ゲームとしては上のほうにいる自分のキャラクターを左右に動かしてそこからボールを落として下にあるいろいろなゴールに入れることを予想しています。
でも床の壁などの画像が正しいものが表示されたり別のものが表示されたりしてしまいます。
以下に必要そうだと思われる部分のソース乗せて起きます。初心者なものでどなたかよろしくお願いしますm(_ _)m
これだけじゃわからないなどでもお願いします。
ゲームとしては上のほうにいる自分のキャラクターを左右に動かしてそこからボールを落として下にあるいろいろなゴールに入れることを予想しています。
でも床の壁などの画像が正しいものが表示されたり別のものが表示されたりしてしまいます。
以下に必要そうだと思われる部分のソース乗せて起きます。初心者なものでどなたかよろしくお願いしますm(_ _)m
これだけじゃわからないなどでもお願いします。
//ファイルの読み込み
int LoadFiles(){
if( LoadDivGraph("media\\chara_hero_l.png",
6, 6, 1, 46, 96, g_images.hero) == -1)
{
return -1;
}
//壁床
g_images.wall[WALL_568]=LoadGraph("media\\wall_s.png");
if(g_images.wall[568]==-1)return -1;
g_images.wall[WALL_48]=DerivationGraph(0,0,48,48,g_images.wall[WALL_568]);
g_images.wall[WALL_192]=DerivationGraph(0,0,192,48,g_images.wall[WALL_568]);
g_images.wall[WALL_284]=DerivationGraph(0,0,284,48,g_images.wall[WALL_568]);
g_images.wall[EASY]=DerivationGraph(0,0,192,12,g_images.wall[WALL_568]);//難易度はゴールに入れる難しさ。これで得点を変える
g_images.wall[MEDIUM]=DerivationGraph(0,0,96,12,g_images.wall[WALL_568]);
g_images.wall[DIFFICULT]=DerivationGraph(0,0,48,12,g_images.wall[WALL_568]);
//玉
g_images.ball[3] = LoadGraph("media\\ball_s.png");
if(g_images.ball[3] == -1) return -1;
g_images.ball[BALL_24] = DerivationGraph(0, 0, 24, 24,
g_images.ball[3]);//これしか使いません
g_images.ball[BALL_48] = DerivationGraph(24, 0, 48, 48,
g_images.ball[3]);
g_images.ball[BALL_96] = DerivationGraph(0, 48, 96, 96,
g_images.ball[3]);
//読み込み成功
return 1;
//マップの読み込み
int LoadMapData(char *filepath){
int f; //ファイルハンドル
char buf[1024]; //テキスト読み込みバッファ
f = FileRead_open(filepath);
if (f==0) return -1; //読み込みエラー
//マップサイズと主人公初期位置読み込み
if(FileRead_gets( buf, 1023, f ) == -1) return -1;
float w, h, sx, sy;
sscanf_s(buf, "%f, %f, %f, %f", &w, &h, &sx, &sy);
g_stage.mapsize_w = w;
g_stage.mapsize_h = h;
//主人公キャラクター
g_stage.hero = CreateBox(PHS(sx), PHS(sy),
PHS(23), PHS(48), 0, true);
//地形オブジェクト読み込み
if(FileRead_gets( buf, 1023, f ) == -1) return -1;
int imax;
sscanf_s(buf, "%d" , &imax); //行数取得
float x, y, angle;
int id;
for(int i=0; i<imax; i++){
if(FileRead_gets( buf, 1023, f ) == -1) return -1;
sscanf_s( buf, "%f, %f, %f, %f, %f, %d",
&x, &y, &w, &h, &angle, &id);
//ボディ作成
Character ch;
ch.body=CreateBox(PHS(x), PHS(y),PHS(w/2), PHS(h/2), angle, false);
switch(id){
case 0:
if((int)w == 48) ch.ID = WALL_48;//この部分(たぶん)に別の画像が入ってしまう。Box2Dの枠は正しい
if((int)w == 192) ch.ID = WALL_192;
if((int)w == 284) ch.ID = WALL_284;
if((int)w == 568) ch.ID = WALL_568;
break;
case 1:
ch.ID=EASY;
ch.type=EASY;//当たり判定用
g_stage.flagbody=ch.body;
ch.body->SetUserData(&g_images.wall[g_stage.num_mapchara]);
break;
case 2:
ch.ID=MEDIUM;
ch.type=MEDIUM;
g_stage.flagbody=ch.body;
ch.body->SetUserData(&g_stage.wall[g_stage.num_mapchara]);
break;
case 3:
ch.ID=DIFFICULT;
ch.type=DIFFICULT;
g_stage.flagbody=ch.body;
ch.body->SetUserData(&g_stage.wall[g_stage.num_mapchara]);
break;
}
ch.used = true;
g_stage.wall[g_stage.num_mapchara] = ch;
g_stage.num_mapchara++;
}
FileRead_close(f);
return 0;
}
}
//地形などの描画
void DrawEnemyAndMap(){
int key = GetJoypadInputState( DX_INPUT_KEY_PAD1 );
//地形の描画
for(int i=0; i<g_stage.num_mapchara; i++){
if(g_stage.wall[i].used == false) continue;
b2Vec2 pos = g_stage.wall[i].body->GetPosition();
float angle = g_stage.wall[i].body->GetAngle();
int id = g_stage.wall[i].ID;
DrawRotaGraph(VIWX(pos.x), VIWY(pos.y), 1, angle,g_images.wall[id], TRUE);//仮
}
//玉の描画
for(int i=0; i<MAXBALLCHARA; i++){
if(g_stage.ball[i].used == false) continue;
b2Vec2 pos = g_stage.ball[i].body->GetPosition();
float angle = g_stage.ball[i].body->GetAngle();
//int id = g_stage.ball[i].ID;
DrawRotaGraph(VIWX(pos.x), VIWY(pos.y), 1, angle,g_images.ball[0], TRUE);
//画面外に出たら消去
if(IsOutScreen(pos.x, pos.y)==true){
//g_world.DestroyBody(g_stage.ball[i].body);
//g_stage.ball[i].used = false;
}
}
//出現
if(IsAKeyTrigger(key)==true){
FallSnow(1);
}
}