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

📄 cparticle.cpp

📁 <B>很多DirectX 9.0游戏编程源码例子</B>
💻 CPP
字号:
#include "CParticle.h"

CParticle::CParticle( void )
{
	// Default to 0
	m_iLife				= 0;
	m_iTextureStart		= 0;
	m_iTextureEnd		= 0;
	m_iTextureType		= 0;
	m_iTextureCur		= 0;
	m_iTextureSteps		= 0;
	m_iTextureCurStep	= 0;

	// Default to 0
	m_vecAcceleration.fX = 0.0f;
	m_vecAcceleration.fY = 0.0f;
	m_vecAcceleration.fZ = 0.0f;

	// Default to 0
	m_vecGravity.fX = 0.0f;
	m_vecGravity.fY = 0.0f;
	m_vecGravity.fZ = 0.0f;

	// Default to 0
	m_vecCurSpeed.fX = 0.0f;
	m_vecCurSpeed.fY = 0.0f;
	m_vecCurSpeed.fZ = 0.0f;
}

CParticle::~CParticle( void )
{
}

void CParticle::vUpdate( void )
{
	// Update the speed
	m_vecCurSpeed.fX += m_vecAcceleration.fX;
	m_vecCurSpeed.fY += m_vecAcceleration.fY;
	m_vecCurSpeed.fZ += m_vecAcceleration.fZ;
	m_vecCurSpeed.fX += m_vecGravity.fX;
	m_vecCurSpeed.fY += m_vecGravity.fY;
	m_vecCurSpeed.fZ += m_vecGravity.fZ;

	// Update the position
	m_vecPos.fX += m_vecCurSpeed.fX;
	m_vecPos.fY += m_vecCurSpeed.fY;
	m_vecPos.fZ += m_vecCurSpeed.fZ;

	//
	// Update texture
	//

	// Static
	if( m_iTextureType == 0 ) {
		m_iTextureCur = m_iTextureStart;
	}
	// Frame based
	else {
		m_iTextureCurStep++;
		if( m_iTextureCurStep >= m_iTextureSteps ) {
			// Linear
			if( m_iTextureType == 1 ) {
				if( m_iTextureCur != m_iTextureEnd ) {
					m_iTextureCur++;
				}
			}
			// Looping - forward
			else if( m_iTextureType == 2 ) {
				m_iTextureCur++;
				if( m_iTextureCur > m_iTextureEnd ) {
					m_iTextureCur = m_iTextureStart;
				}
			}
			// Looping - backward
			else if( m_iTextureType == 3 ) {
				m_iTextureCur--;
				if( m_iTextureCur < m_iTextureStart ) {
					m_iTextureCur = m_iTextureEnd;
				}
			}
			// Reset texture counter
			m_iTextureCurStep = 0;
		}
	}

	// Subtract life counter
	m_iLife--;
}

// Return if particle is still active or not
bool CParticle::bIsAlive( void )
{
	// Return TRUE if alive
	if( m_iLife ) 
		return( 1 );
	// Return FALSE if dead
	else 
		return( 0 );
}

// Setup the texture animation system
void CParticle::vSetTextures( int iType, int iStart, int iStop, int iSteps )
{
	m_iTextureStart		= iStart;
	m_iTextureEnd		= iStop;
	m_iTextureType		= iType;
	m_iTextureCur		= iStart;
	m_iTextureSteps		= iSteps;
	m_iTextureCurStep	= 0;	
}

void CParticle::vSetPos( float x, float y, float z )
{
	m_vecPos.fX = x;
	m_vecPos.fY = y;
	m_vecPos.fZ = z;
}	

void CParticle::vSetAcceleration( float x, float y, float z )
{
	m_vecAcceleration.fX = x;
	m_vecAcceleration.fY = y;
	m_vecAcceleration.fZ = z;
}	

void CParticle::vSetSpeed( float x, float y, float z )
{
	m_vecCurSpeed.fX = x;
	m_vecCurSpeed.fY = y;
	m_vecCurSpeed.fZ = z;
}	

void CParticle::vSetGravity( float x, float y, float z )
{
	m_vecGravity.fX = x;
	m_vecGravity.fY = y;
	m_vecGravity.fZ = z;
}	

void CParticle::vSetLife( int iLife )
{
	m_iLife = iLife;
}

⌨️ 快捷键说明

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