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

📄 sprite.h

📁 一个小的类似于雷电的射击游戏
💻 H
字号:
#pragma once

#include "stdafx.h"

typedef WORD		BOUNDSACTION;
const BOUNDSACTION	BA_STOP		= 0,
					BA_WRAP		= 1,
					BA_BOUNCE	= 2,
					BA_DIE		= 3;

typedef	WORD		SPRITEACTION;
const SPRITEACTION	SA_NONE			= 0x0000L,
					SA_KILL			= 0x0001L,
					SA_ADDSPRITE	= 0x0002L,
					SA_SHOW			= 0x0003L;

class Sprite
{
public:
	// Construction & destruction function
	Sprite(Bitmap* pBitmap);
	Sprite(Bitmap* pBitmap, RECT& rcBounds,
		BOUNDSACTION baBoundAction = BA_STOP);
	Sprite(Bitmap* pBitmap, POINT ptPostion, 
		POINT ptVelocity, int iZorder,
		RECT& rcBounds, BOUNDSACTION ba = BA_STOP);
	virtual ~Sprite(void);

	// Normal method
	virtual	void	Update();
	virtual void	Draw(HDC hDC);
	// This method is used to test mouse curser is single clicked the sprite
	BOOL			IsPointInside(int x, int y);

	// Data access method
	RECT&	GetPosition()		{ return m_rcPosition; };
	RECT&	GetCollision()		{ return m_rcCollision; };
	POINT	GetVelocity()		{ return m_ptVelocity; };
	int		GetZOrder()			{ return m_iZOrder; };
	int		GetWidth()
	{ return (m_pBitmap->GetWidth() / m_iNumFrames); };
	int		GetHeight()			{ return m_pBitmap->GetHeight(); };
	BOOL	IsHidden()			{ return m_bHidden; };
	BOOL	IsDead()			{ return m_bDead; };

	void	SetPosition(int x, int y);
	void	SetPosition(POINT ptPosition);
	void	SetPosition(RECT& rcPosition)
	{ CopyRect(&m_rcPosition, &rcPosition); };

	void	OffsetPosition(int x, int y);
	void	SetVelocity(int x , int y);
	void	SetVelocity(POINT ptVelocity);

	void	SetZOrder(int iZOrder)		{ m_iZOrder = iZOrder; };
	void	SetBounds(RECT& rcBounds)	{ CopyRect(&m_rcBounds, &rcBounds); };
	void	SetBoundsAction(BOUNDSACTION ba) { m_baBoundAction = ba; };
	void	SetHidden(BOOL bHidden)		{ m_bHidden = bHidden; };
	void	SetDead(BOOL bDead)		{ m_bDead = bDead; };
	void	SetSpriteAction(SPRITEACTION sa) { m_saSpriteAction = sa; };

	// 计算碰撞矩形,virtual可以让派生类自己定义计算方法
	virtual void CalcCollisionRect();
	BOOL	TestCollision(Sprite* pTestSprite);

	// 允许精灵添加精灵,如飞机发射子弹
	virtual Sprite* AddSprite();
	void	Kill() { m_bDead = TRUE; };

	// 设置精灵动画参数
	void SetNumFrames(int iNumFrames);
	void SetFrameDelay(int iFrameDelay);
	virtual void UpdateFrame();

protected:
	Bitmap			*m_pBitmap;				// 位图
	RECT			m_rcPosition;			// 位置矩形
	RECT			m_rcCollision;			// 碰撞矩形
	POINT			m_ptVelocity;			// 速度
	int				m_iZOrder;				// Z Order
	RECT			m_rcBounds;				// 活动范围矩形
	BOUNDSACTION	m_baBoundAction;		// 活动范围边界行为
	SPRITEACTION	m_saSpriteAction;		// 精灵行为
	BOOL			m_bHidden;
	BOOL			m_bDead;
	BOOL			m_bOneCycle;
	// 为支持动画设置的参数
	int				m_iNumFrames, m_iCurFrame;
	int				m_iFrameDelay, m_iFrameTrigger;

};

⌨️ 快捷键说明

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