|
我读了一个坦克大战的源代码,对于其中的地图技术不明白,每个方块都有一个mask,类似于m_map[row][col].mask &= ~flag这样的代码好多,根据我苦苦分析,知道这个mask至少有下面的功能:使每块砖不是一击就碎,而是一片片被击毁,。。。。。。
源码没多少注释,所以没闹明白怎么回事,希望有熟悉这方面的高手给讲一下其原理,
BOOL CPlane::GetSurface( int row, int col, RECT& rcTank, int a, int b)
{
char obj = m_map[row][col].obj;
if( obj == OBJ_NULL || obj == OBJ_TREE )
return FALSE;
else
return TRUE;
WORD mask = m_map[row][col].mask;
WORD flag;
for( int i = 0; i < 4; i ++ )
{//1,3
if( (i == a || i == b) ||
(a == -1 && b == -1) )
{
RECT rc, temp;
rc.left = col * TILE_W + i % 2 * 16;
rc.right = rc.left + 16;
rc.top = row * TILE_H + i / 2 * 16;
rc.bottom = rc.top + 16;
switch( i )
{
case 0:
flag = 0xcc00;
break;
case 1:
flag = 0x3300;
break;
case 2:
flag = 0x00cc;
break;
case 3:
flag = 0x0033;
}
if( (mask & flag) && IntersectRect( &temp, &rcTank, &rc ) )
return TRUE;
}
}
return FALSE;
}
附上一段代码,呵呵,好多位操作,不明白啊! |
|