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

📄 animation.cpp

📁 一个3D的保龄球的源代码
💻 CPP
字号:
#include "animation.h"
#include "..\system\resfile.h"

CAnimation::CAnimation(CEngine *pEngine)
{
	m_pEngine = pEngine;
	ImageID = -1;
	nModules = 0;
	nFrames = 0;
	nActions = 0;
	pModule = NULL;
	pFrameData = NULL;
	pActionData = NULL;
}

bool CAnimation::loadAnimation(CBufReader &pData)
{
	int i;
	ImageID = (char)pData.ReadUShortReverse();
	
	nModules = pData.ReadUChar();
	pModule = (AniModule *)m_pEngine->GetMem()->GlobalMalloc((sizeof(AniModule)) * nModules);
	for(i=0;i<(int)nModules;i++)
	{
		pModule[i].x = (short)pData.ReadUChar();
		pModule[i].y = (short)pData.ReadUChar();
		pModule[i].w = pData.ReadUChar();
		pModule[i].h = pData.ReadUChar();
	}
	
	nFrames = pData.ReadUShortReverse();
	if (nFrames > 0) 
	{
		pFrameData = (short**)m_pEngine->GetMem()->GlobalMalloc((sizeof(short*)) * nFrames);
		m_frameSize = (char*)m_pEngine->GetMem()->GlobalMalloc((sizeof(char)) * nFrames);
		for(i=0;i<(int)nFrames;i++)
		{
			pData.ReadUChar();
			pData.ReadUChar();
			m_frameSize[i] = pData.ReadUChar();
			pFrameData[i] = (short*)m_pEngine->GetMem()->GlobalMalloc(m_frameSize[i]*(sizeof(short*))*4);
			for (int ii=0; ii<m_frameSize[i]*4; ii++)
				pFrameData[i][ii] = pData.ReadUShortReverse();
		}
	}
	
	nActions = pData.ReadUShortReverse();
	if (nActions > 0)
	{
		pActionData = (char**)m_pEngine->GetMem()->GlobalMalloc((sizeof(char*)) * nActions);
		m_actionSize = (char*)m_pEngine->GetMem()->GlobalMalloc((sizeof(char)) * nActions);
		
		for(i=0;i<(int)nActions;i++)
		{
			pData.ReadUChar();
			m_actionSize[i] = pData.ReadUChar();
			pActionData[i] = (char*)m_pEngine->GetMem()->GlobalMalloc(m_actionSize[i]*2);
			pData.ReadBlock( pActionData[i], m_actionSize[i]*2);
		}	
		
	}
	return true;
}

void CAnimation::drawFrame(unsigned short FrameIndex, int fx , int fy )
{
	SYS_ASSERT(FrameIndex < nFrames);
	int mx=0,my=0,i;
	unsigned char mId;
	for(i=0;i<m_frameSize[FrameIndex];i++)
	{
		mx = pFrameData[FrameIndex][i * 4 + 2];
		my = pFrameData[FrameIndex][i * 4 + 3];
		mId = (unsigned char)pFrameData[FrameIndex][i * 4 + 0];
		if (mId < 0)
			mId = 256 + mId;
		drawModule( mId , mx + fx , my + fy , pFrameData[FrameIndex][i*4+1]);
	}
}

void CAnimation::drawModule(unsigned char moduleId ,int mx,int my, int bReverse)
{
	SYS_ASSERT(moduleId < nModules);
	CGfx *g = m_pEngine->GetGfx();
	if (m_pImage != 0)
		g->DrawBmp(mx, my, pModule[moduleId].w, pModule[moduleId].h, m_pImage, pModule[moduleId].x, pModule[moduleId].y, bReverse?1:0);
}

void CAnimation::drawAction(int acid, int frmid, int x,int y)
{
	int frameid = (pActionData[acid][(frmid<<1)]&0xFF) + ((pActionData[acid][(frmid<<1) + 1] & 0x01) << 8);
	drawFrame(frameid , x , y);
}

⌨️ 快捷键说明

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