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

📄 cmoverole.cpp

📁 一个个人开发的rpg游戏<亚特兰蒂斯传奇>的源码
💻 CPP
字号:
//--------------------------------------------------------------------------------------------------------
//                        游戏成批移动角色模块
//CMoveRole.cpp
//游戏引擎中的成批移动角色部分
//作者:吴振华(kylinx)(中国科大01级11系)
//E-mail:game-diy@163.com
//创建于:2003/7/2X by Kylinx
//--------------------------------------------------------------------------------------------------------
#include"CMoveRole.h"
#include"CGraph.h"
#include"CGame.h"
#include"CMacro.h"
#include"CRole.h"
#include"CMessage.h"
CMoveRole::CMoveRole()
{
	m_pRoleList=KGDList<STMoveRole*>::ForeCreate();
}
CMoveRole::~CMoveRole()
{
	if(m_pRoleList)
	{
		m_pRoleList->Clear();
		delete m_pRoleList;
		m_pRoleList=NULL;
	}
}
BOOL CMoveRole::AddRole(STRenderRole*pRole,int nDestX,int nDestY)
{
	LOA_ASSERT(pRole);
	STMoveRole*pMoveRole=new STMoveRole;
	pMoveRole->pRole=pRole;
	pMoveRole->nDestX=nDestX;
	pMoveRole->nDestY=nDestY;
	
	return m_pRoleList->Insert(pMoveRole,pMoveRole->pRole->pRole->nID);
}
BOOL CMoveRole::BeginMove(CGame*pGame)
{
	LOA_ASSERT(pGame);

	MSG msg;
	STMoveRole*pRole;
	
 	BOOL bLastMoveOK=false;
	while(pGame->IsPlayGame() && !bLastMoveOK)												//等待正在移动的角色移动完成
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
			if(!GetMessage(&msg, NULL,0,0)) 
				return msg.wParam;
			TranslateMessage(&msg); 
			DispatchMessage(&msg);
		}
		else if(pGame->IsActive())
		{
			bLastMoveOK=true;
			m_pRoleList->ResetToHead();
			while(m_pRoleList->GetAndMovePointToNext(pRole))
			{
				if(pRole->pRole->pRole->bMoving)
				{
					pRole->pRole->pRole->nCurrentPathStep=pRole->pRole->pRole->Path.nLength;
//					pRole->pRole->pRole->MoveTo(pGame->GetLog(),pGame,pRole->nDestX,pRole->nDestY);
					bLastMoveOK=false;
				}
			}
			pGame->GetMessageQueue()->ExecuteMessage();
			pGame->SortAndShowRole();
			pGame->ComputeMapStartPos();
			pGame->UpdateScreen();
		}
		else
			WaitMessage();
	}
	m_pRoleList->ResetToHead();
	while(m_pRoleList->GetAndMovePointToNext(pRole))
	{
		pRole->pRole->pRole->MoveTo(pGame->GetLog(),pGame,pRole->nDestX,pRole->nDestY);
	}
	BOOL bAllMoveOk;
	while(pGame->IsPlayGame())
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
			if(!GetMessage(&msg, NULL,0,0)) 
				return msg.wParam;
			TranslateMessage(&msg); 
			DispatchMessage(&msg);
		}
		else if(pGame->IsActive())
		{
			bAllMoveOk=true;
			m_pRoleList->ResetToHead();
			while(m_pRoleList->GetAndMovePointToNext(pRole))
			{
				if(pRole->pRole->pRole->bMoving)											//如果正在移动
				{
					bAllMoveOk=false;
 					pRole->pRole->pRole->MoveTo(pGame->GetLog(),pGame,pRole->nDestX,pRole->nDestY);
				}
				else
				{
					pRole->pRole->pRole->MoveAni();
				}
			}
			if(bAllMoveOk)
				break;
			pGame->GetMessageQueue()->ExecuteMessage();
			pGame->SortAndShowRole();
			pGame->ComputeMapStartPos();
			pGame->UpdateScreen();
		}
		else
			WaitMessage();
	}
	m_pRoleList->ResetToHead();
	while(m_pRoleList->GetAndMovePointToNext(pRole))
	{
		delete pRole;
	}
	m_pRoleList->Clear();
	return true;
}

⌨️ 快捷键说明

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