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

📄 sphere.h

📁 C++台球游戏代码
💻 H
字号:
#if !defined(AFX_SPHERE_H__FC705F3B_568E_4973_B608_B8F7700D9ECE__INCLUDED_)
#define AFX_SPHERE_H__FC705F3B_568E_4973_B608_B8F7700D9ECE__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Base.h"

#define SPHERE_D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)

class CSphere:public CBase
{
private:
	struct SPHERE_CUSTOMVERTEX
	{
		float x,y,z;     //Position of vertex in 3D space
		float nx,ny,nz;  //Lighting Normal
		float tu,tv;     //Texture coordinates
	};

	struct SPHERE_STATE
	{
		D3DXVECTOR3 sVector;  //Position of Centigram in 3D space
		D3DXVECTOR3 vVector;  //Direction of Velocity in 3D space
        float v;              //Speed of Sphere
	};
	SPHERE_STATE *m_pSphereState;

	D3DXVECTOR3 m_vecSavePosition;  //Save sphere position for collision bar
	D3DXVECTOR3 m_vecSavePosition2; //Save sphere position for collision sphere

public:
	BOOL SetMaterial(D3DCOLORVALUE rgbaDiffuse,D3DCOLORVALUE rgbaAmbient,
		             D3DCOLORVALUE rgbaSpecular,D3DCOLORVALUE rgbaEmissive,float rPower);
	BOOL SetTexture(const char* szTextureFilePath);
	DWORD Render();
	CSphere(LPDIRECT3DDEVICE8 pD3DDevice,int iRings=20,int iSegments=20);
	void MoveSphere();
	void MoveSphereForUser(float x,float z);
	virtual ~CSphere();
	 
    inline void SetSpherePosition(float x,float y,float z)
	{
		m_pSphereState->sVector.x=x;
	    m_pSphereState->sVector.y=y;
	    m_pSphereState->sVector.z=z;
	};

	inline void GetSpherePosition(D3DXVECTOR3 &vecSpherePos)
	{
		vecSpherePos=m_pSphereState->sVector;
	};

	inline void GetSavedSpherePosition(D3DXVECTOR3 &vecSavedSpherePos)
	{
		vecSavedSpherePos=m_vecSavePosition;
	};

	inline void GetSavedSpherePosition2(D3DXVECTOR3 &vecSavedSpherePos)
	{
		vecSavedSpherePos=m_vecSavePosition2;
	};

	inline void SaveSpherePosition()
	{
		m_vecSavePosition=m_pSphereState->sVector;
	};

	inline void SaveSpherePosition2()
	{
		m_vecSavePosition2=m_pSphereState->sVector;
	};

	inline void ContradictoryZv()
	{
		m_pSphereState->vVector.z=-m_pSphereState->vVector.z;
	};

	inline void ContradictoryXv()
	{
		m_pSphereState->vVector.x=-m_pSphereState->vVector.x;
	};

	void MirrorVAoubtAxis(D3DXVECTOR3 &n);

	inline void ReduceSphereVelocity(float percent)
	{
		m_pSphereState->v=m_pSphereState->v*percent;
	};
	
	inline float CheckSphereEnergy()
	{
		return m_pSphereState->v;
	};

	inline void SetSphereVelocityDir(const D3DXVECTOR3 &vDir)
	{
		m_pSphereState->vVector=vDir;
	};

	inline void SetSphereVelocity(const float &velocity)
	{
		m_pSphereState->v=velocity;
	};

	inline void GetSphereVelocityDir(D3DXVECTOR3 &vDir)
	{
		vDir=m_pSphereState->vVector;
	};

	inline float GetSphereVelocity()
	{
		return m_pSphereState->v;
	};

	//*****************************************
	//*****************************************
	inline void SetSphereStateToFalse()
	{
		m_bSphereInUse=FALSE;
	};

	inline void SetSphereStateToTrue()
	{
		m_bSphereInUse=TRUE;
	};

	inline BOOL GetSphereState()
	{
		return m_bSphereInUse;
	};

	void SetSphereVelocityAt_Y_NegativeAxis();

	inline float GetSpherePosAt_Y_Axis()
	{
		return m_pSphereState->sVector.y;
	};
	//*****************************************
	//*****************************************

private:
	BOOL CreateIndexBuffer();
	BOOL UpdateVertices();
	BOOL CreateVertexBuffer();
	void TransformSphere();
	void TransformSphereForUser();
	void UpdateSpherePosition();
	void FrictionReduseVelocity();

	LPDIRECT3DDEVICE8 m_pD3DDevice;
	LPDIRECT3DVERTEXBUFFER8 m_pVertexBuffer;
	LPDIRECT3DTEXTURE8 m_pTexture;
	D3DMATERIAL8 m_matMaterial;
	LPDIRECT3DINDEXBUFFER8 m_pIndexBuffer;

	int m_iRings;
	int m_iSegments;

	float m_fTotalDis;
	D3DXVECTOR3 m_vecSphereRotationAxis;
	BOOL m_bSphereInUse;

	DWORD m_dwNumOfVertices;
	DWORD m_dwNumOfIndices;
	DWORD m_dwNumOfPolygons;
};

#endif // !defined(AFX_SPHERE_H__FC705F3B_568E_4973_B608_B8F7700D9ECE__INCLUDED_)

⌨️ 快捷键说明

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