MapData_t MapdataSelect[2]で、2マップ分の構造体配列データを作って、
MapData_t MapDataにMapdataSelect[X]を代入して、MapDataを表示することによって、Xを変えるだけでマップが変わるという考えなのですが、
MapdataSelect[2](マップ2つ分)を初期化するときに、空の画像用配列0を用意して、後からその0に画像を代入してから、
MapDataをMapdataSelect[0](マップ1)にセットして、MapDataの画像を表示する感じなのですが、うまく表示されません。
マップ自体の配列を構造体に入れるのは後回しにして、まずはマップ1の画像を表示するのを成功させたいのですが、
どこが画像データが表示されない原因なのでしょうか?
#include "DxLib.h"
#include "FPlayer.h"
#include "FMap.h"
// 物体構造体の実体
static ObjectData_t ObjectData[20];
//MAP共通
#define SCREEN_WIDTH 512
#define SCREEN_HEIGHT 384
int CameraX,CameraY;
int ZahyouTest = 0;
int TestChip;
int TestPlayer;
//マップ1
#define Iramuduki_HEIGHT 11
#define Iramuduki_WIDTH 11
int IramudukiMAP[Iramuduki_HEIGHT][Iramuduki_WIDTH] = //壁と床用マップデータ
{
{0,9,9,9,9,9,9,9,9,0,0},
{8,0,7,7,7,7,7,7,7,7,0},
{8,6,1,1,1,1,1,1,1,1,0},
{8,6,1,1,1,1,1,1,1,1,0},
{8,6,1,1,1,1,1,1,1,1,0},
{8,6,1,1,1,1,1,1,1,1,2},
{8,6,1,1,1,1,1,1,1,1,2},
{8,6,1,1,1,1,1,1,1,1,0},
{8,6,1,1,1,1,1,1,1,1,0},
{0,6,1,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0,0},
};
int IramudukiKAGU[Iramuduki_HEIGHT][Iramuduki_WIDTH] = //家具用マップデータ
{
{ 0, 0, 0, 0, 0,18, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0,17, 0, 0, 6, 0, 0, 0, 0},
{ 0, 0, 0,16, 0, 9, 3,12, 0, 0, 0},
{ 0, 0, 0,15, 0, 0, 0, 0, 0, 1, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 0},
{ 0, 0, 0, 0, 5, 0,10, 4, 0, 2, 0},
{ 0, 0, 0, 0,14, 0, 0,13, 0,11, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
};
int IramudukiHit[Iramuduki_HEIGHT][Iramuduki_WIDTH] = //家具用マップデータ
{
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{ 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1,},
{ 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1,},
{ 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1,},
{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
{ 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0,},
{ 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1,},
{ 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1,},
{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
};
typedef struct {
int stage;
int kagustage;
int hitstage;
int width;
int height;
int Chip[10];
int Kagu[20];
} MapData_t;
MapData_t MapdataSelect[2] = {{ 0, 0, 0, Iramuduki_WIDTH, Iramuduki_HEIGHT,{0}, {0}},
{ 0, 0, 0, 0, 0, 0, 0, 0}};
MapData_t MapData = MapdataSelect[0];
void FMap_Initialize( ObjectData_t *Objectdata , FPlayer_t *FPlayer)//フィールドマップ初期化
{
MapData_t MapData = MapdataSelect[0];
TestChip = LoadGraph("Image/Map/test1.png");
TestPlayer = LoadGraph("Image/Map/test2.png");
int CaffeYuka = LoadGraph("Image/Map/Yuka/Carpet4.png");
int CaffeEXIT = LoadGraph("Image/Map/Yuka/CaffeEXIT.png");
int CaffeKabe1LEFT = LoadGraph("Image/Map/Kabe/Caffe1LEFT.png");
int CaffeKabe1RIGHT = LoadGraph("Image/Map/Kabe/Caffe1RIGHT.png");
int CaffeKabe2LEFT = LoadGraph("Image/Map/Kabe/Caffe2LEFT.png");
int CaffeKabe2RIGHT = LoadGraph("Image/Map/Kabe/Caffe2RIGHT.png");
int Syokubutu0 = LoadGraph("Image/Map/Kagu/Syokubutu0.png");
int Table0 = LoadGraph("Image/Map/Kagu/Table0.png");
int Isu0LEFT = LoadGraph("Image/Map/Kagu/Isu0LEFT.png");
int Isu0RIGHT = LoadGraph("Image/Map/Kagu/Isu0RIGHT.png");
int Isu0LEFTOKU = LoadGraph("Image/Map/Kagu/Isu0LEFTOKU.png");
int Isu0RIGHTOKU = LoadGraph("Image/Map/Kagu/Isu0RIGHTOKU.png");
int Counter0LEFT = LoadGraph("Image/Map/Kagu/Counter0LEFT.png");
int Counter0CENTER = LoadGraph("Image/Map/Kagu/Counter0CENTER.png");
int Counter0RIGHT = LoadGraph("Image/Map/Kagu/Counter0RIGHT.png");
int Kabee0 = LoadGraph("Image/Map/Kagu/Kabee0.png");
MapdataSelect[0].Chip[1] = CaffeYuka;
MapdataSelect[0].Chip[2] = CaffeEXIT;
MapdataSelect[0].Chip[6] = CaffeKabe1LEFT;
MapdataSelect[0].Chip[7] = CaffeKabe1RIGHT;
MapdataSelect[0].Chip[8] = CaffeKabe2LEFT;
MapdataSelect[0].Chip[9] = CaffeKabe2RIGHT;
MapdataSelect[0].Kagu[1] = Syokubutu0;
MapdataSelect[0].Kagu[2] = Syokubutu0;
MapdataSelect[0].Kagu[3] = Table0;
MapdataSelect[0].Kagu[4] = Table0;
MapdataSelect[0].Kagu[5] = Table0;
MapdataSelect[0].Kagu[6] = Isu0LEFT;
MapdataSelect[0].Kagu[7] = Isu0LEFT;
MapdataSelect[0].Kagu[8] = Isu0LEFT;
MapdataSelect[0].Kagu[9] = Isu0RIGHT;
MapdataSelect[0].Kagu[10] = Isu0RIGHT;
MapdataSelect[0].Kagu[11] = Isu0LEFTOKU;
MapdataSelect[0].Kagu[12] = Isu0LEFTOKU;
MapdataSelect[0].Kagu[13] = Isu0RIGHTOKU;
MapdataSelect[0].Kagu[14] = Isu0RIGHTOKU;
MapdataSelect[0].Kagu[15] = Counter0LEFT;
MapdataSelect[0].Kagu[16] = Counter0CENTER;
MapdataSelect[0].Kagu[17] = Counter0RIGHT;
MapdataSelect[0].Kagu[18] = Kabee0;
}
void FMAP_Object(FPlayer_t FPlayer, ObjectData_t Objectdata){//オブジェクト構造体に物体の座標を代入
ObjectData[1].Img = MapData.Kagu[1];
ObjectData[2].Img = MapData.Kagu[2];
ObjectData[3].Img = MapData.Kagu[3];
ObjectData[4].Img = MapData.Kagu[4];
ObjectData[5].Img = MapData.Kagu[5];
ObjectData[6].Img = MapData.Kagu[6];
ObjectData[7].Img = MapData.Kagu[7];
ObjectData[8].Img = MapData.Kagu[8];
ObjectData[9].Img = MapData.Kagu[9];
ObjectData[10].Img = MapData.Kagu[10];
ObjectData[11].Img = MapData.Kagu[11];
ObjectData[12].Img = MapData.Kagu[12];
ObjectData[13].Img = MapData.Kagu[13];
ObjectData[14].Img = MapData.Kagu[14];
ObjectData[15].Img = MapData.Kagu[15];
ObjectData[16].Img = MapData.Kagu[16];
ObjectData[17].Img = MapData.Kagu[17];
ObjectData[18].Img = MapData.Kagu[18];
//家具用マップデータから置くXY座標を計算
int x,y;
for(y=0;y<MapData.height;++y)
{
for(x=0;x<MapData.width;++x)
{
if(IramudukiKAGU[y][x]!=0 ){
ObjectData[(IramudukiKAGU[y][x])].DrawX = 24*12+((12-y)*(48/2)+(x*24)-24);
ObjectData[(IramudukiKAGU[y][x])].DrawY = 12*12+((x+y)*12);
}
}
}
ObjectData[0].Img = FPlayer.Image;
ObjectData[0].DrawX = (int)FPlayer.X;
ObjectData[0].DrawY = (int)FPlayer.Y;
}
//オブジェクトのY座標比較関数
int int_cmp(const ObjectData_t **a, const ObjectData_t **b)
{
if ((*a)->DrawY < (*b)->DrawY)
return (-1);
else if ((*a)->DrawY > (*b)->DrawY)
return (1);
return (0);
}
void FMap_Draw(FPlayer_t FPlayer)//マップ描画
{
int x,y;
for(y=0;y<MapData.height;++y) //マップを描画
{
for(x=0;x<MapData.width;++x)
{
if(IramudukiMAP[y][x]!=0){
DrawRotaGraph(24*12+((12-y)*(48/2)+(x*24)-24-CameraX),12*12+((x+y)*12-CameraY), 1.0, 0.0, MapData.Chip[(IramudukiMAP[y][x])], TRUE );
}
}
}
if(ZahyouTest==1)
for(y=0;y<MapData.height+1;++y) //マップを描画
{
for(x=0;x<MapData.width+1;++x)
{
if(IramudukiHit[y][x]!=0){
DrawRotaGraph(48*x,48*y, 1.0, 0.0, TestChip, TRUE );
}
}
}
if(ZahyouTest==1)
DrawRotaGraph((int)FPlayer.HitX,(int)FPlayer.HitY, 1.0, 0.0,TestPlayer, TRUE );
//物体を奥から描画するように並び替えて描画する
int i;
ObjectData_t *SortArray[19] = { &ObjectData[0], &ObjectData[1], &ObjectData[2], &ObjectData[3], &ObjectData[4], &ObjectData[5],
&ObjectData[6], &ObjectData[7], &ObjectData[8], &ObjectData[9], &ObjectData[10], &ObjectData[11], &ObjectData[12],
&ObjectData[13], &ObjectData[14], &ObjectData[15], &ObjectData[16], &ObjectData[17], &ObjectData[18]};
int nx = sizeof(SortArray) / sizeof(SortArray[0]); // 配列の要素数
qsort(SortArray, nx, sizeof(ObjectData_t*), (int(*)(const void*, const void*))int_cmp);//ソートする
for (i = 0; i < nx; i++)
DrawRotaGraph(SortArray[i]->DrawX-CameraX,SortArray[i]->DrawY-CameraY, 1.0, 0.0, SortArray[i]->Img, TRUE );
}
void FMap_Scroll( FPlayer_t *FPlayer)//マップスクロール
{
CameraX = (int)FPlayer->X - SCREEN_WIDTH/2 ;
//ステージのスクロール
if(CameraX < 0)CameraX = 0;
if(CameraX > (MapData.width*2*48)-SCREEN_WIDTH) CameraX = (MapData.width*2*48)-SCREEN_WIDTH;
FPlayer->ViewX = (int)FPlayer->X - CameraX;
CameraY = (int)FPlayer->Y - SCREEN_HEIGHT/2 ;
//ステージのスクロール
if(CameraY < 0)CameraY = 0;
if(CameraY > (MapData.height*2*12)-MapData.height) CameraY = (MapData.height*2*12)-MapData.height;
FPlayer->ViewY = (int)FPlayer->Y - CameraY;
}