⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game_sprite.cpp

📁 大家好!这是一个网络游戏源码
💻 CPP
字号:
#include "runner_game.h"

//从方向到格子的转换

int	DirToGrid[8][2] = 
{
	0  , -1 ,  //UP
	1  , -1 ,  //UP_LEFT
	1  ,  0 ,
	1  ,  1 ,
	0  ,  1 ,
   -1  ,  1 , 
   -1  ,  0 ,
   -1  , -1 ,
};

//从方向到象素点位移的转换
int  DirToStep[8][2] = 
{
	-2 , -1 , 
	-2 ,  0 ,
	-2 ,  1 ,
	 0 ,  2 ,
	 2 ,  1 ,
	 2 ,  0 ,
	 2 , -1 ,
	 0 , -2 ,
};

int DirToViewDir[8] = 
{
	6 ,	5 , 4 , 3 , 2 , 1 , 0 , 7 
};

SPR_CHARACTER::SPR_CHARACTER()
{ 
	pPathLink = NULL; 
	pCurrentPathLink = NULL;
	m_iStepX = 0;
	m_iStepY = 0;
}

SPR_CHARACTER::~SPR_CHARACTER()
{
	Release();
}

VOID SPR_CHARACTER::Release()
{
	DeletePathLink(&pPathLink);
}

BOOL SPR_CHARACTER::Init(SPR_INIT *pSprInit)
{
	m_iWidth		 = pSprInit->iWidth;
	m_iHeight		 = pSprInit->iHeight;
	m_iOffsetAtGridX = pSprInit->iOffsetAtGridX;
	m_iOffsetAtGridY = pSprInit->iOffsetAtGridY;
    return TRUE;
}

BOOL SPR_CHARACTER::Run(GAME_SCENE *pScene)
{
	ProcessPath(pScene);
	return TRUE;
}

BOOL SPR_CHARACTER::ProcessPath(GAME_SCENE *pScene)
{
   	
	//如果当前位置 = 下一个应该在的位置....
	if( (m_iWorldX==m_iNextWorldX) && (m_iWorldY==m_iNextWorldY) )
	{
		//设为停止
		m_iStepX = 0;
		m_iStepY = 0;
		
		//格子坐标相等
		m_iGridX = m_iNextGridX;
		m_iGridY = m_iNextGridY;
		
		if(pCurrentPathLink) //如果还有步数
		{
	  		
			// 取得下一步信息
	        PATH_LINK *pNextPath = pCurrentPathLink->next_path_ptr;
	        
			m_iSprDire		= pCurrentPathLink->dire;
			m_iNextGridX	= m_iGridX + DirToGrid[m_iSprDire][0];
			m_iNextGridY	= m_iGridY + DirToGrid[m_iSprDire][1];
	        m_iStepX		= DirToStep[m_iSprDire][0] ;
			m_iStepY		= DirToStep[m_iSprDire][1] ;
           	
			//设置下一个位置(世界坐标系)
			GridToWorld(pScene , m_iNextGridX , m_iNextGridY , &m_iNextWorldX , &m_iNextWorldY); 
			
			// 重新排序
			//m_iResortOff	=	m_iGridY * pScene->gridWorld.GetWorldGridWidth() + m_iGridX;
			//if(m_boInView)	g_SprMgr->ResortLinkAdd(this);

			pCurrentPathLink = pNextPath;
		}
		else //没有路径
		{
			//目标格不是当前格
			if(m_iDestGridX!=m_iGridX||m_iDestGridY!=m_iGridY)
			{
				DeletePathLink(&pPathLink);
				pScene->ResetPathBlockBuffer();
				pPathLink = SearchPath(pScene->pbBlockPath		, 
				        pScene->gridWorld.GetWorldGridWidth()	,
						pScene->gridWorld.GetWorldGridHeight()  ,
					    m_iGridX		    					,	 
					    m_iGridY								,	
					    m_iDestGridX							, 
					    m_iDestGridY);
			
			    pCurrentPathLink = pPathLink;
				if(pPathLink==NULL) //没有找到路径
				{
				}		
			
			}
		}
	}
	
	m_iWorldX+=m_iStepX;
	m_iWorldY+=m_iStepY;
	
	return TRUE;
}

VOID SPR_CHARACTER::GridToWorld(GAME_SCENE *pScene , int x , int y , int *piWorldX , int *piWorldY)
{
	int iTempX , iTempY;
	pScene->gridWorld.GridToWorld(x , y , &iTempX , &iTempY);
	*piWorldX	= iTempX + m_iOffsetAtGridX;
	*piWorldY	= iTempY + m_iOffsetAtGridY;
}

VOID SPR_CHARACTER::Dest(GAME_SCENE *pScene , int x , int y)
{ 
	if(pScene->gridWorld.GetGridValue(x , y) || !pScene->gridWorld.IsGridValid(x , y))	return;
	m_iDestGridX = x;
	m_iDestGridY = y;
	DeletePathLink(&pPathLink);
    pCurrentPathLink = pPathLink;
}

VOID SPR_CHARACTER::Location(GAME_SCENE *pScene , int x , int y , int dire)
{
	if(pScene->gridWorld.GetGridValue(x , y) || !pScene->gridWorld.IsGridValid(x , y))	return;
	m_iSprDire	 = dire;
	m_iGridX	 = x; 
	m_iGridY	 = y; 
	m_iNextGridX = m_iGridX;
	m_iNextGridY = m_iGridY;
	m_iDestGridX = m_iGridX;
	m_iDestGridY = m_iGridY;
	GridToWorld(pScene , m_iGridX , m_iGridY , &m_iWorldX , &m_iWorldY);
	m_iNextWorldX = m_iWorldX;
	m_iNextWorldY = m_iWorldY;
	DeletePathLink(&pPathLink);
    pCurrentPathLink = pPathLink; 
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -