ひとまずやっつけで組んだのがこちら
/*main.h*/
#ifndef DEF_MAIN_H
#define DEF_MAIN_H
#define OBJECT_MAX 100
typedef struct{
int CZ;
}ZSORT;/*Zソート構造体*/
extern ZSORT g_ZSORT[OBJECT_MAX];/*配列で*/
#endif
/*player.cpp*/
void PDRAW(PLAY p){
/*影の描画*/
DrawRotaGraph(sqx+32 - p.camerax,sqy+32 -p.cameray,exrate,0.0,p.s_img,TRUE);
/*プレイヤー描画*/
if(p.jumpflag==true){/*ジャンプの時は*/
DrawGraph(p.viewx - p.camerax,p.viewy - p.cameray,p.p_jump[p.img_num2],TRUE);/*ジャンプの画像*/
}else{
DrawGraph(p.viewx - p.camerax, p.viewy - p.cameray,p.p_img[p.img_num],TRUE);/*立ち画像走る画像*/
}
DrawGraph(p.viewx - p.camerax, p.viewy + 48 - p.cameray,img,TRUE);/*キャラの足もとに点を描画。どこが足下かわかるように。*/
g_ZSORT[1].CZ = p.viewy + 48;/*キャラの足元の座標をZSORT構造体配列の一つ目のメンバに代入*/
}
/*map.cpp*/
void BDRAW(MAP1 m1,MAP2 m2,PLAY p){
for(int y=0;y<m1.ReadNumY;y++){
for(int x=0;x<m1.ReadNumX;x++){
if(m2.BuildData[y][x]==1){/*建物データが1のところ*/
DrawGraph(MQX(x,y) - p.camerax, MQY(x,y) - 83 - p.cameray, m1.img4, TRUE);/*建物描画*/
DrawGraph(MQX(x,y) - p.camerax, MQY(x,y) - 83 + 103 -p.cameray, img2, TRUE);/*建物の底辺に点を描画。Zソートの基準がどこの点かわかるように*/
g_ZSORT[0].CZ = MQY(x,y) - 83 + 103;/*建物の底辺を代入*/
}
}
}
}
/*main.cpp*/
#include <DxLib.h>
#include "main.h"
#include "Key.h"
#include "Player.h"
#include "Map.h"
ZSORT g_ZSORT[OBJECT_MAX];/*Zソート構造体の実態を宣言*/
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
AllocConsole();
freopen("CONOUT$", "w", stdout); //標準出力をコンソールにする
// printf( "これでprintfが使えます\n" ); //←お試し用*/
//構造体宣言
PLAY p;
MAP1 m1;
MAP2 m2;
PINI(&p);
MINI(&m1,&m2);
map_data_load(&m1,&m2);
while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && updatekey()==0 ){
PMOVE(&p);
MCHECK(m2,&p);/*当たり判定*/
MDRAW(m1,m2,p);/*地面チップ描画*/
BDRAW(m1,m2,p);/*建物描画*/
PDRAW(p);/*プレイヤー描画*/
if(g_ZSORT[1].CZ < g_ZSORT[0].CZ){/*プレイヤーのZ座標 < 建物のZ座標*/
BDRAW(m1,m2,p);/*建物の方を先に描画*/
}
}
DxLib_End();
return 0;
}
そのため建物が複数になると、その建物の内で一番Z座標が高いのを基準にするので
それ以外の建物にZソートが反映されません。
なので極端な話なのですが
void BDRAW(MAP1 m1,MAP2 m2,PLAY p){
for(int y=0;y<m1.ReadNumY;y++){
for(int x=0;x<m1.ReadNumX;x++){
if(m2.BuildData[y][x]==1){/*建物データが1のところ*/
DrawGraph(MQX(x,y) - p.camerax, MQY(x,y) - 83 - p.cameray, m1.img4, TRUE);/*建物描画*/
DrawGraph(MQX(x,y) - p.camerax, MQY(x,y) - 83 + 103 -p.cameray, img2, TRUE);/*建物の底辺に点を描画。Zソートの基準がどこの点かわかるように*/
g_ZSORT[0].CZ = MQY(x,y) - 83 + 103;/*建物の底辺を代入*/
}
}
}
}
void BDRAW1(){
for(int y=0;y<m1.ReadNumY;y++){
for(int x=0;x<m1.ReadNumX;x++){
if(建物1){/*マップ上のオブジェクトに番号割り振り、それを基準に描画*/
建物1の描画;
}
}
}
void BDRAW2(){
for(int y=0;y<m1.ReadNumY;y++){
for(int x=0;x<m1.ReadNumX;x++){
if(建物2){/*マップ上のオブジェクトに番号割り振り、それを基準に描画*/
建物2の描画;
}
}
}
void BDRAW3(){
for(int y=0;y<m1.ReadNumY;y++){
for(int x=0;x<m1.ReadNumX;x++){
if(建物3){/*マップ上のオブジェクトに番号割り振り、それを基準に描画*/
建物3の描画;
}
}
}
/*全ての描画を一つの関数にまとめる*/
void DRAW(){
BDRAW1();
BDRAW2();
BDRAW3();
PDRAW();/*プレイヤーの描画;*/
/*これらをZ値を基準にソート*/
}
アドバイスお願いします。