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

📄 spirit.cpp

📁 一个完整的2D滚屏游戏示例
💻 CPP
字号:
#include "stdafx.h"
#include "Spirit.h"
#include "define.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
CSpirit::CSpirit()
{
m_nDyingPage=30;
}

CSpirit::CSpirit(int nSourceX,int nSourceY,int nWidth,int nHeight,int nX,int nY,bool bActive,bool bAlive,int nPace)
{
m_nWidth=nWidth;
m_nHeight=nHeight;

m_rcSource.left=nSourceX;
m_rcSource.top=nSourceY;
m_rcSource.right=m_rcSource.left+m_nWidth-1;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;


m_nX=nX;
m_nY=nY;

m_nPace=nPace;

m_bActive=bActive;
m_bAlive=bAlive;

m_nDyingPage=30;
}	
////////////////////////////////////////////////////////////////////////////////////////////////////
bool CSpirit::Collison(CSpirit spirit)
{
int nStrictRangeX=8,nStrictRangeY=8;  //判断范围严格程度,(象素);因为一幅图不可能画满精灵,所以缩小一点范围是合理的;

switch(m_nWidth+spirit.m_nWidth)
{
case SPIRIT_WIDTH+SPIRIT_WIDTH:nStrictRangeX=15;break;
case SPIRIT_WIDTH+SPIRIT_WIDTH_2://nStrictRangeX=11;break;
case SPIRIT_WIDTH+SPIRIT_WIDTH_4:nStrictRangeX=11;break;
case SPIRIT_WIDTH+SPIRIT_WIDTH_8:nStrictRangeX=11;break;
case SPIRIT_WIDTH_2+SPIRIT_WIDTH_2:nStrictRangeX=8;break;
case SPIRIT_WIDTH_2+SPIRIT_WIDTH_4:nStrictRangeX=6;break;
case SPIRIT_WIDTH_4+SPIRIT_WIDTH_4:nStrictRangeX=4;break;
}

switch(m_nHeight+spirit.m_nHeight)
{
case SPIRIT_HEIGHT+SPIRIT_HEIGHT:nStrictRangeY=15;break;
case SPIRIT_HEIGHT+SPIRIT_HEIGHT_2:nStrictRangeX=11;break;
case SPIRIT_HEIGHT+SPIRIT_HEIGHT_4:nStrictRangeY=11;break;
case SPIRIT_HEIGHT+SPIRIT_HEIGHT_8:nStrictRangeY=10;break;
case SPIRIT_HEIGHT_2+SPIRIT_HEIGHT_2:nStrictRangeY=8;break;
case SPIRIT_HEIGHT_2+SPIRIT_HEIGHT_4:nStrictRangeY=6;break;
case SPIRIT_HEIGHT_4+SPIRIT_HEIGHT_4:nStrictRangeY=4;break;
}

if(m_bAlive&&spirit.m_bAlive)//对活着的的精灵撞击判断才有意义;
if((m_nY>-m_nHeight/2)&&(m_nY<SCREEN_HEIGHT-m_nHeight/2)&&(m_nX>-m_nWidth/2)&&(m_nX<SCREEN_WIDTH-m_nWidth/2))
if((m_nX+m_nWidth-nStrictRangeX>spirit.m_nX)
 &&(m_nX+nStrictRangeX<spirit.m_nX+spirit.m_nWidth)
 &&(m_nY+m_nHeight-nStrictRangeY>spirit.m_nY)
 &&(m_nY+nStrictRangeY<spirit.m_nY+spirit.m_nHeight))
return true;

return false;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
void CSpirit::DyingTrace(int nSpiritID)
{
	if(m_bActive&&(!m_bAlive))
	{
    m_nY++;
		switch(nSpiritID)
		{
		case 1:m_rcSource.top=START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*3;//m_nHeight+1;
			   m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
			   m_rcSource.left=START_X+SPIRIT_WIDTH*((30-m_nDyingPage)/3);
			   m_rcSource.right=m_rcSource.left+m_nWidth-1;
			   break;
		case 2:break;
		}
	}
m_nDyingPage--;
if(m_nDyingPage==0)
{
m_bAlive=false;
m_bActive=false;
}	
return;
}

⌨️ 快捷键说明

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