📄 gamestateover.hpp
字号:
#ifndef _GAME_STATES_OVER_H_
#define _GAME_STATES_OVER_H_
#include "GameState.h"
#define SPLASH_DELAY 4000.0f
#define SPLASH_DELAY_2 2000.0f
class MeshEffect;
class GameStateOver: public GameState
{
private:
JTexture* mSplashTex;
JQuad* mSplashQuad;
int mMode;
int mStage;
float mAlpha;
float mTimer;//记录静止时间
float mDelta;
float mMax;
float mMaxDelta;
MeshEffect* mEffect;
public:
GameStateOver(GameApp* app): GameState(app)
{
mEffect = NULL;
}
virtual ~GameStateOver()
{
}
virtual void Create()
{
mSplashTex = mEngine->LoadTexture("Res/gameover.bmp", true);
mSplashQuad = new JQuad(mSplashTex,0.0f,0.0f, 640.0f, 480.0f);
mEffect = new MeshEffect(mSplashTex, 0,0, 640,480);
}
virtual void Destroy()
{
if (mSplashQuad)
delete mSplashQuad;
if (mSplashTex)
mEngine->FreeTexture(mSplashTex);
if (mEffect)
delete mEffect;
}
virtual void Start()
{
mMode = 0;//共3种模式
mStage = 0;//3阶段
mAlpha = 100.0f;//透明度
mMax = 16.0f;//抖动幅度
mMaxDelta = 16.0f/SPLASH_DELAY;//每次抖动幅度变化
mDelta = 255/SPLASH_DELAY;//透明度每次的变化
mEffect->SetMax(mMax);//可以去掉,有默认值
mEffect->SetAlpha(mAlpha);//
mEffect->SetPosition(0,0);
mEngine->EnableVSync(true);
}
virtual void End()
{
mEngine->EnableVSync(false);
}
virtual void Update()
{
float dt = mEngine->GetDelta();
if(mEngine->GetButtonState(PSP_CTRL_START))
{
mApp->Destroy();
mApp->Create();
return;
}
if (mEngine->GetButtonState(PSP_CTRL_CROSS)) // skip everything...
{
//mMode = 3;
mMode=2;
mApp->Destroy();
mApp->Create();
return;
}
if (mMode==0)
{
mAlpha += mDelta*dt;
if (mAlpha > 255.0f)
{
mAlpha = 255.0f;
mMode = 1;
mTimer = 0.0f;
}
mMax -= mMaxDelta*dt;
if (mMax<0.0f)
mMax = 0.0f;
}
else if (mMode==1)
{
mTimer += dt;
if (mTimer > SPLASH_DELAY_2)
mMode = 2;
mMax = 0.0f;
}
else if (mMode==2)
{
mAlpha -= mDelta*dt;
if (mAlpha < 0.0f)
{
mAlpha = 0.0f;
mStage++;
mMode = 3;
mApp->Destroy();
mApp->Create();
}
mMax += mMaxDelta*dt;
if (mMax>100.0f)
mMax = 100.0f;
}
else
return;
mEffect->SetMax(mMax);
mEffect->SetAlpha(mAlpha);
mEffect->Update(dt);
}
virtual void Render()
{
mEngine->ClearScreen(ARGB(255,255,255,255));
if (mMode == 3) return;
mEffect->Render();
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -