GameStateLogo.hpp
上传用户:zhj2929
上传日期:2022-07-23
资源大小:28772k
文件大小:11k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #ifndef _GAME_STATES_LOGO_H_
  2. #define _GAME_STATES_LOGO_H_
  3. #include "GameState.h"
  4. #include "../../JGE/HGE/include/hgesprite.h"
  5. #include "../../JGE/HGE/include/hgeparticle.h"
  6. #define SPLASH_DELAY 4000.0f
  7. #define SPLASH_DELAY_2 2000.0f
  8. #define GAMESCREEN_WIDTH  512
  9. #define GAMESCREEN_HEIGHT 480
  10. extern HGE *hge;
  11. class GameStateLogo: public GameState
  12. {
  13. private:
  14. int mMode;
  15. int mStage;
  16. float mAlpha;
  17. float mTimer;
  18. float mDelta;
  19. //控制背景小图片的渲染的y坐标
  20. float mBgY;
  21. float x, y;
  22. //记录渲染的图片序列号
  23. int number;
  24. //控制渲染速度
  25. int rendspeed;
  26. //站立还是行走
  27.     int StandOrWalk;
  28. int JumpOrParticle;
  29. //加载马里奥脸部朝向后边的一组图像的图片
  30. JTexture* texB;
  31.     HTEXTURE tex;//加载精灵图片的指针
  32.     JTexture* quadTex;//背景图片
  33. JTexture* logoTex;//logo图片
  34. //背景
  35. JQuad* quad;
  36. JSprite* mstand1;
  37.     JSprite* mjump;
  38. JSprite* mwalk1;
  39. JSprite* mwalk2;
  40. JSprite* logo;
  41. hgeSprite* spt;
  42.    
  43. hgeParticleSystem * par1;
  44. hgeParticleSystem * par2;
  45. hgeParticleSystem * par3;//加载菜单粒子特效系统的指针
  46. hgeParticleSystem * par4;//加载菜单粒子特效系统的指针
  47. hgeParticleSystem * par5;//加载菜单粒子特效系统的指针
  48. hgeParticleSystem * par6;
  49. hgeParticleSystem * par7;
  50. hgeParticleSystem * par8;
  51. hgeParticleSystem * par9;
  52. hgeParticleSystem * par10;
  53. hgeParticleSystem * par11;
  54.     hgeParticleSystem * par12;
  55. hgeParticleSystem * par13;
  56.     hgeParticleSystem * par14;
  57. hgeParticleSystem * par15;
  58.     hgeParticleSystem * par16;
  59. hgeParticleSystem * par17;
  60. hgeParticleSystem * par18;
  61.    float caidanx1;
  62.    float caidanx2;
  63.    float caidanx3;
  64.    float logoX;
  65. public:
  66. GameStateLogo(GameApp* app): GameState(app) 
  67. {
  68. }
  69. virtual ~GameStateLogo() 
  70. {
  71. }
  72. virtual void Create() 
  73. {
  74. mEngine->LoadMP3("music/logo.mp3");
  75. texB = mEngine->LoadTexture("mario/all-supermario3.png", true);
  76. quadTex = mEngine->LoadTexture("backgroud/snow.png", true);
  77.         logoTex = mEngine->LoadTexture("logo/logo.png", true);
  78. quad = new JQuad(quadTex, 0.0f, 0.0f, GAMESCREEN_WIDTH, GAMESCREEN_HEIGHT);
  79. mstand1 = new JSprite(texB,502,0,100,100);
  80. mjump = new JSprite(texB,100,0,100,100);
  81. mwalk1 = new JSprite(texB,400,0,100,100);
  82. mwalk2 = new JSprite(texB,600,0,100,100);
  83. logo = new JSprite(logoTex,0,0,158,158);
  84. mstand1->SetHotSpot(50,50);
  85.     mjump->SetHotSpot(50,50);
  86.         mwalk1->SetHotSpot(50,50);
  87.     mwalk2->SetHotSpot(50,50);
  88. logo->SetHotSpot(80,80);
  89. //粒子的渲染图形
  90.     tex=hge->Texture_Load("particle/particles.png");
  91.    //如果加载失败,则弹出提示窗口
  92.        if(!tex)
  93.    {
  94.   MessageBox(NULL, "Can't load particles.png", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
  95.    }
  96.    //设置粒子的渲染图形
  97.       spt=new hgeSprite(tex, 32, 32, 32, 32);
  98.   spt->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE);
  99.   spt->SetHotSpot(16,16);
  100.  
  101.   //初始化粒子系统,并点燃粒子系统
  102.       par1=new hgeParticleSystem("trail.psi",spt);
  103.   par1->MoveTo(550,490);
  104.   par1->Fire();
  105.   par2=new hgeParticleSystem("trail.psi",spt);
  106.   par2->MoveTo(550,490);
  107.   par2->Fire();
  108.   par3=new hgeParticleSystem("trail.psi",spt);
  109.   par3->MoveTo(caidanx1+30,255);
  110.   par3->Fire();
  111.   par4=new hgeParticleSystem("trail.psi",spt);
  112.   par4->MoveTo(caidanx2+70,295);
  113.   par4->Fire();
  114.   par5=new hgeParticleSystem("trail.psi",spt);
  115.   par5->MoveTo(caidanx3+25,335);
  116.   par5->Fire();
  117.   par6=new hgeParticleSystem("trail.psi",spt);
  118.   par6->MoveTo(550,490);
  119.   par6->Fire();
  120.   par7=new hgeParticleSystem("trail.psi",spt);
  121.   par7->MoveTo(550,490);
  122.   par7->Fire();
  123.   par8=new hgeParticleSystem("trail.psi",spt);
  124.   par8->MoveTo(550,490);
  125.   par8->Fire();
  126.   par9=new hgeParticleSystem("trail.psi",spt);
  127.   par9->MoveTo(550,490);
  128.   par9->Fire();
  129.   par10=new hgeParticleSystem("trail.psi",spt);
  130.   par10->MoveTo(550,490);
  131.   par10->Fire();
  132.   par11=new hgeParticleSystem("trail.psi",spt);
  133.   par11->MoveTo(550,490);
  134.   par11->Fire();
  135.   par12=new hgeParticleSystem("trail.psi",spt);
  136.   par12->MoveTo(550,490);
  137.   par12->Fire();
  138.   par13=new hgeParticleSystem("trail.psi",spt);
  139.   par13->MoveTo(550,490);
  140.   par13->Fire();
  141.   par14=new hgeParticleSystem("trail.psi",spt);
  142.   par14->MoveTo(550,490);
  143.   par14->Fire();
  144.   par15=new hgeParticleSystem("trail.psi",spt);
  145.   par15->MoveTo(550,490);
  146.   par15->Fire();
  147.   par16=new hgeParticleSystem("trail.psi",spt);
  148.   par16->MoveTo(550,490);
  149.   par16->Fire();
  150.   par17=new hgeParticleSystem("trail.psi",spt);
  151.   par17->MoveTo(550,490);
  152.   par17->Fire();
  153.   par18=new hgeParticleSystem("trail.psi",spt);
  154.   par18->MoveTo(550,490);
  155.   par18->Fire();
  156. }
  157. virtual void Destroy() 
  158. {
  159. if (texB)
  160. mEngine->FreeTexture(texB);
  161. if (quadTex)
  162. mEngine->FreeTexture(quadTex);
  163. if (quad) delete quad;
  164. if (mstand1) delete mstand1;
  165. if (mjump) delete mjump;
  166. if (mwalk1) delete mwalk1;
  167. if (mwalk2) delete mwalk2;
  168. if (logoTex) delete logoTex;
  169. if (logo) delete logo;
  170. //if (parQuad) delete parQuad;
  171. if (par1) delete par1;
  172. if (par2) delete par2;
  173. if (par3) delete par3;
  174. if (par4) delete par4;
  175. if (par5) delete par5;
  176. if (par6) delete par6;
  177. if (par7) delete par7;
  178. if (par8) delete par8;
  179. if (par9) delete par9;
  180. if (par10) delete par10;
  181. if (par11) delete par11;
  182. if (par12) delete par12;
  183. if (par13) delete par13;
  184. if (par14) delete par14;
  185. if (par15) delete par15;
  186. if (par16) delete par16;
  187. if (par17) delete par17;
  188. if (par18) delete par18;
  189. if(spt)  delete spt;
  190. hge->Texture_Free(tex);
  191. }
  192. virtual void Start()
  193. {
  194. mMode = 0;
  195. mStage = 0;
  196. mAlpha = 0.0f;
  197.         mBgY = 0.0f;
  198. x=450.0f;
  199.     y=100.0f;
  200.     //记录渲染的图片序列号
  201.     number=1;
  202.     //调用15次框架函数之后,再渲染另外的图片
  203.     rendspeed=15;
  204.     StandOrWalk = 1;//站立
  205. JumpOrParticle=1;//跳跃
  206.    //菜单项的位置
  207.    caidanx1=620.0f;
  208.        caidanx2=620.0f;
  209.        caidanx3=620.0f;
  210.    logoX=600.0f;
  211.    mDelta = 255/SPLASH_DELAY;
  212.    mEngine->PlayMP3();
  213.    mEngine->EnableVSync(true);
  214. }
  215. virtual void End()
  216. {
  217. mEngine->EnableVSync(false);
  218. mEngine->StopMP3();
  219. mEngine->FreeMP3();
  220. }
  221. virtual void Update()
  222. {
  223. float dt = mEngine->GetDelta();
  224. //Mario的更新动画
  225. if(x==450&&StandOrWalk<90)
  226.     {
  227.            StandOrWalk++;
  228.     }
  229.     else 
  230.     {
  231.         if(x>150)
  232.         {
  233.                x=x-1.5f;
  234.         }
  235.         else
  236.         {  
  237. if(JumpOrParticle<50)
  238.         {
  239.        JumpOrParticle++;
  240.         }
  241.         else
  242.         {
  243.    //第一个粒子特效的控制
  244.    par1->MoveTo(50,400);
  245.        par1->MoveTo(80,200);
  246.        par1->Update(dt);
  247.    //第二个粒子特效的控制
  248.        par2->MoveTo(80,200);
  249.                    par2->MoveTo(110,300);
  250.        par2->Update(dt);
  251.    //第六个粒子特效的控制
  252.        par6->MoveTo(110,300);
  253.                    par6->MoveTo(140,200);
  254.        par6->Update(dt);
  255.    //第七个粒子特效的控制
  256.        par7->MoveTo(140,200);
  257.                    par7->MoveTo(170,400);
  258.        par7->Update(dt);
  259.    par8->MoveTo(200,300);
  260.                    par8->MoveTo(220,400);
  261.        par8->Update(dt);
  262.    par9->MoveTo(220,400);
  263.                    par9->MoveTo(240,300);
  264.        par9->Update(dt);
  265.    par10->MoveTo(300,300);
  266.                    par10->MoveTo(270,300);
  267.        par10->Update(dt);
  268.    par11->MoveTo(270,300);
  269.                    par11->MoveTo(300,400);
  270.        par11->Update(dt);
  271.    par12->MoveTo(300,400);
  272.                    par12->MoveTo(270,400);
  273.        par12->Update(dt);
  274.    par13->MoveTo(340,200);
  275.                    par13->MoveTo(340,400);
  276.        par13->Update(dt);
  277.    par14->MoveTo(340,200);
  278.                    par14->MoveTo(430,200);
  279.        par14->Update(dt);
  280.    par15->MoveTo(430,200);
  281.                    par15->MoveTo(430,300);
  282.        par15->Update(dt);
  283.    par16->MoveTo(340,300);
  284.                    par16->MoveTo(430,300);
  285.        par16->Update(dt);
  286.    par17->MoveTo(430,300);
  287.                    par17->MoveTo(430,400);
  288.        par17->Update(dt);
  289.    par18->MoveTo(430,400);
  290.                    par18->MoveTo(340,400);
  291.        par18->Update(dt);
  292. }
  293.        x=150;
  294.          }
  295.            rendspeed--;
  296.  
  297.  if(JumpOrParticle==1)
  298.          {
  299.                caidanx1=caidanx1-4;
  300.            caidanx2=caidanx2-4;
  301.            caidanx3=caidanx3-4;
  302.                logoX=logoX-4;
  303.    par3->MoveTo(caidanx1+30,255);
  304.    par3->MoveTo(caidanx1+80,255);
  305.    par3->Update(dt);
  306.    par4->MoveTo(caidanx2+70,295);
  307.                par4->MoveTo(caidanx2+120,295);
  308.    par4->Update(dt);
  309.    par5->MoveTo(caidanx3+25,335);
  310.    par5->MoveTo(caidanx3+75,335);
  311.    par5->Update(dt);
  312.         }
  313. }
  314. //背景的更新动画
  315. mBgY += 0.05f*dt;
  316. if (mBgY > 0.0f)
  317. mBgY = -60.0f;
  318. //--------------------------------------------------------
  319. if (mMode==0)
  320. {
  321. mAlpha += mDelta*dt;
  322. if (mAlpha > 255.0f)
  323. {
  324. mAlpha = 255.0f;
  325. mMode = 1;
  326. mTimer = 0.0f;
  327. }
  328. }
  329. else if (mMode==1)
  330. {
  331. mTimer += dt;
  332. if (mTimer > SPLASH_DELAY_2)
  333. mMode = 2;
  334. }
  335. else if (mMode==2)
  336. {
  337. mAlpha -= mDelta*dt;
  338. if (mAlpha < 0.0f)
  339. {
  340. mAlpha = 0.0f;
  341. mStage++;
  342. mMode = 3;
  343. mApp->SetNextState(GAME_STATE_SPLASH);
  344. }
  345. }
  346. else
  347. return;
  348. }
  349. virtual void Render() 
  350. {
  351. mEngine->ClearScreen(ARGB(255,255,255,255));
  352. if (mMode == 3) return;
  353.    
  354.    //背景的渲染动画
  355. float bgx = 0.0f;
  356. float bgy = mBgY;
  357. for (int i=0;i<12;i++)
  358. {
  359.  mEngine->RenderQuad(quad, bgx, bgy);
  360.  bgy += 60.0f;
  361.     }
  362. //渲染马里奥
  363.    if(x==450&&StandOrWalk<90)
  364.    {
  365.    mstand1->SetPosition(x,y);
  366.            mstand1->Render();
  367.    }
  368.    else
  369.    {
  370.       if(x>150&&number==1&&rendspeed)
  371.       {
  372.   mwalk1->SetPosition(x,y);
  373.           mwalk1->Render();
  374.       }
  375.       else if(x>150&&number==2&&rendspeed)
  376.       {
  377.   mstand1->SetPosition(x,y);
  378.       mstand1->Render();
  379.           }
  380.       else if(x>150&&number==3&&rendspeed)
  381.       {
  382.   mwalk2->SetPosition(x,y);
  383.               mwalk2->Render();
  384.       }
  385.           else if(x>150&&number==4&&rendspeed)
  386.       {
  387.   mstand1->SetPosition(x,y);
  388.               mstand1->Render();
  389.        }
  390.        else if(x==150) 
  391.        {
  392.   mjump->SetPosition(x,y);
  393.               mjump->Render();
  394.   if(JumpOrParticle<50)
  395.       {
  396.       }
  397.       else
  398.       {
  399.      //渲染粒子效果
  400.  logo->SetPosition(350.0f,100.0f);
  401.                  logo->Render();
  402.      par1->Render();
  403.      par2->Render();
  404.  par6->Render();
  405.      par7->Render();
  406.  par8->Render();
  407.  par9->Render();
  408.  par10->Render();
  409.  par11->Render();
  410.                  par12->Render();
  411.  par13->Render();
  412.                  par14->Render();
  413.  par15->Render();
  414.                  par16->Render();
  415.  par17->Render();
  416.  par18->Render();
  417.       }
  418.     }
  419.     }
  420.    if(!rendspeed)
  421.    {
  422.   rendspeed=15;
  423.   if(number==1)
  424.   {
  425.  number=2;
  426.   }
  427.   else if(number==2)
  428.   {
  429.  number=3;
  430.   }
  431.   else if(number==3)
  432.   {
  433.  number=4;
  434.   }
  435.   else if(number==4)
  436.   {
  437.  number=1;
  438.   }
  439.    }
  440.    if(JumpOrParticle==1)
  441.    {
  442.            logo->SetPosition(logoX,300);
  443.            logo->Render();
  444.            par3->Render();
  445.    par4->Render();
  446.    par5->Render();
  447.    }
  448. }
  449. };
  450. #endif