|
|
小弟已经把地图用数组铺好了,可是和地图碰撞的问题依然解决不了,如果哪位大虾能帮小弟把碰撞问题解决,小弟愿为大虾肝脑涂地~~!!请看下面代码
# pragma once
#define CELL_WIDTH 32
#define CELL_HEIGHT 32
#define MAP_LEFT 192
#define MAP_TOP 92
#define TILE_WIDTH 32 //地图块的宽
#define TILE_HEIGHT 32 //地图块的高
typedef struct //结构体
{
bool iMap[2][2];
int iType;
}MAP;
class CMap
{
public:
CMap()
{
}
~CMap()
{
}
void DrawMap();
void LoadMap();
private:
MAP m_iMap[13][13];
protected:
};
extern CMap * g_pMap;
//////////////////////////////////////////////////////////////////
#include "map.h"
CMap * g_pMap;
void CMap: rawMap()
{
RECT r1 = { 223, 31, 224,32 };
RECT r2 = { MAP_LEFT, MAP_TOP, SCREEN_WIDTH - MAP_LEFT,SCREEN_HEIGHT - MAP_TOP };
g_pDDraw->DrawSurface( g_pDDraw->m_pPicSurface[11].pPicSurface, r1, r2, g_pDDraw->m_pBack, 0 );
for( int i = 0; i < 13; i++ )
{
for( int j = 0; j < 13; j++ )
{
if( m_iMap[j].iType == 8 )
continue;
if( m_iMap[j].iType == 5 || m_iMap[j].iType == 6 )
{
g_pDDraw->DrawSurface( g_pDDraw->m_pPicSurface[PIC_TILE].pPicSurface, m_iMap[j].iType * TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, MAP_LEFT + j * CELL_WIDTH, MAP_TOP + i * CELL_HEIGHT, g_pDDraw->m_pBack, 0 );
continue;
}
for( int ii = 0; ii < 2; ii++ )
{
for( int jj = 0; jj < 2; jj++)
{
if( m_iMap[j].iMap[ii][jj] )
g_pDDraw->DrawSurface( g_pDDraw->m_pPicSurface[PIC_TILE].pPicSurface, m_iMap[j].iType * TILE_WIDTH, 0,
TILE_WIDTH / 2, TILE_HEIGHT / 2, MAP_LEFT + j * CELL_WIDTH + jj * ( CELL_WIDTH / 2 ), MAP_TOP + i * CELL_HEIGHT + ii * ( CELL_HEIGHT / 2 ), g_pDDraw->m_pBack, 0 );
}
}
}
}
}
void CMap: oadMap()
{
FILE * pFile = _tfopen( L"pic/map.txt", L"r" );
memset( m_iMap, 1, sizeof( MAP ) * 13* 13 );
for(int i = 0; i < 13; i++ )
{
for(int j = 0; j < 13; j++ )
{
m_iMap[j].iType = fgetc( pFile ) - 48;
}
}
}
//上面这些只是铺地图的代码,哪位大虾愿给小弟加上和地图碰撞的代码,小弟感激不尽~~ [em17] [em17] |
|