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

游戏引擎

开发平台:

Visual C++

  1. #ifndef _GAMEOBJECT_HPP
  2. #define _GAMEOBJECT_HPP
  3. class Logo
  4. {
  5. protected:
  6. //hge的指针
  7. //HGE *hge;
  8. //加载马里奥脸部朝向后边的一组图像的图片
  9. JTexture* texB;
  10. //指向马力奥面向后方站立的图片
  11. JSprite* mstand1;
  12. //指向马力奥面向后方跳跃的精灵图片
  13.     JSprite* mjump;
  14.     //指向马力奥面向后方走路的精灵图片1
  15. JSprite* mwalk1;
  16. //指向马力奥面向后方走路的精灵图片2
  17. JSprite* mwalk2;
  18. //记录渲染的图片序列号
  19. int number;
  20. //控制渲染速度
  21. int rendspeed;
  22. //站立还是行走
  23.     int StandOrWalk;
  24. int JumpOrParticle;
  25. //粒子特效的一些指针
  26. JSprite* spt;//指向粒子渲染的精灵图片
  27.     JSystem* par;//加载粒子特效系统的指针
  28. JParticleSystem* par2;//加载粒子特效系统的指针
  29.     
  30. JParticleSystem* par3;//加载菜单粒子特效系统的指针
  31.     JParticleSystem* par4;//加载菜单粒子特效系统的指针
  32. JParticleSystem* par5;//加载菜单粒子特效系统的指针
  33.     JTexture* tex;//加载精灵图片的指针
  34. //粒子特效系统的一些变量
  35.    //第一个粒子系统的位置坐标
  36.    float x0,xp,yp;
  37.    //第一个粒子系统每次的移动距离
  38.    float dx, dy;
  39.    //第二个粒子系统的位置坐标
  40.    float x02,xp2,yp2;
  41.    //第二个粒子系统每次的移动距离
  42.    float dx2, dy2;
  43.    //粒子系统的移动速度
  44.    float speed;
  45.    float friction;
  46.    //菜单特效
  47.    JMusic*  snd2;//点击菜单项时发出的声音
  48.    JTexture* tex2;//鼠标指针的图片
  49.    JQuad* quad;//背景图片的四边形结构
  50.    //hgeGUI指针,用来在界面上与用户进行交互
  51.    JGUI *gui;
  52.    //指向菜单选项字体的指针
  53.    hgeFont *fnt;
  54.    //指向鼠标的精灵图片
  55.    JSprite *spr;
  56.    float caidanx1;
  57.    float caidanx2;
  58.    float caidanx3;
  59.    boolean xianshi;
  60.    static JGE* mEngine;
  61.    static GameStateLogo* mApp;
  62. public:
  63. //logo的构造函数,初始化一些最初的变量
  64. Logo(GameStateLogo *app);
  65. //随机函数,用来生成随机数
  66. int Random();
  67. //设置logo的框架函数,控制马里奥的运动路线和粒子系统的移动。
  68. bool FrameFunc();
  69. //设置logo的渲染函数,根据马里奥的运动来即时渲染。
  70. void RenderFunc();
  71. //logo的析构函数,释放logo所占用的系统资源。
  72. ~Logo();
  73. };
  74. JGE* Logo::mEngine = NULL;
  75. GameStateLogo* Logo::mApp = NULL;
  76. Logo::Logo(GameStateLogo *app)
  77. {
  78. //传递游戏指针
  79. mApp = app;
  80. texB = mApp-> GetTexture(0);
  81. mQuestion = mApp->GetTexture(1);
  82. mEngine = mApp->GetJGE();
  83. //加载马里奥脸部朝向后边的一组图像的图片
  84. texB=hge->Texture_Load("mario/all-supermario3.png");
  85.     
  86. //粒子效果中的一些图片
  87. tex=hge->Texture_Load("particle/particles.png");
  88. //加载背景图片
  89. quad.tex=hge->Texture_Load("backgroud/snow.png");
  90. //加载鼠标指针的图片
  91. tex2=hge->Texture_Load("cursor/cursor.png");
  92. //加载鼠标移动声音
  93. snd2=hge->Effect_Load("music/menu.wav");
  94. //如果加载失败,则弹出提示窗口
  95. if(!texB|| !tex||!quad.tex || !tex2 || !snd2)
  96. {
  97. MessageBox(NULL, "Can't load all-supermario2.png or logo.mp3 or particles.png or bg.png, cursor.png or menu.wav", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
  98. check=false;
  99. return check;
  100. }
  101. //指向马力奥面向后方站立的图片
  102.     mstand1  =new hgeSprite(texB,502,0,100,100) ;
  103.     //指向马力奥面向后方跳跃的精灵图片
  104. mjump =new hgeSprite(texB,100,0,100,100);
  105. //指向马力奥面向后方走路的精灵图片1
  106. mwalk1 =new hgeSprite(texB,400,0,100,100);
  107.     //指向马力奥面向后方走路的精灵图片2
  108. mwalk2 =new hgeSprite(texB,600,0,100,100);
  109. //设置马里奥图片的anchor point,基本相当于是图片的中心位置
  110. mstand1->SetHotSpot(50,50);
  111. mjump->SetHotSpot(50,50);
  112.     mwalk1->SetHotSpot(50,50);
  113. mwalk2->SetHotSpot(50,50);
  114. //设置马里奥图片的渲染模式
  115. mstand1->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE);
  116.     mjump->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE);
  117. mwalk1->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE);
  118. mwalk2->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE);
  119. //加载粒子渲染的形状
  120. spt=new hgeSprite(tex, 32, 32, 32, 32);
  121. //设置粒子渲染的模式
  122. spt->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE);
  123. //设置粒子的重心
  124. spt->SetHotSpot(16,16);
  125. //初始化第一个粒子系统
  126. par=new hgeParticleSystem("trail.psi",spt);
  127. //点燃第一个粒子系统
  128.     par->Fire();
  129. //初始化第二个粒子系统
  130. par2=new hgeParticleSystem("trail.psi",spt);
  131. //点燃第二个粒子系统
  132.     par2->Fire();
  133. //初始化第一个菜单项的粒子系统
  134. par3=new hgeParticleSystem("trail.psi",spt);
  135. //点燃第一个菜单项的粒子系统
  136.     par3->Fire();
  137. //初始化第二个菜单项的粒子系统
  138. par4=new hgeParticleSystem("trail.psi",spt);
  139. //点燃第二个菜单项的粒子系统
  140.     par4->Fire();
  141. //初始化第三个菜单项的粒子系统
  142. par5=new hgeParticleSystem("trail.psi",spt);
  143. //点燃第三个菜单项的粒子系统
  144.     par5->Fire();
  145. //设置背景图片的渲染模式
  146. quad.blend=BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_NOZWRITE;
  147. //设置背景图片的深度-即z值和颜色
  148.     for(int i=0;i<4;i++)
  149. {
  150. quad.v[i].z=0.5f;
  151. quad.v[i].col=0xFFFFFFFF;//完全不透明的白色
  152. }
  153. //背景图片四边形的范围
  154. quad.v[0].x=0; quad.v[0].y=0; 
  155. quad.v[1].x=GAMESCREEN_WIDTH; quad.v[1].y=0; 
  156. quad.v[2].x=GAMESCREEN_WIDTH; quad.v[2].y=GAMESCREEN_HEIGHT; 
  157. quad.v[3].x=0; quad.v[3].y=GAMESCREEN_HEIGHT; 
  158. //创建并初始化hgeGUI的指针,用于在界面上和用户进行交互
  159. gui=new hgeGUI();
  160. //生成菜单项的字体
  161. fnt=new hgeFont("font1.fnt");
  162. //根据鼠标指针的图片生成精灵图片
  163. spr=new hgeSprite(tex2,0,0,32,32);
  164. return check;
  165. //马里奥的初始位置坐标
  166.     x=450.0f;
  167. y=100.0f;
  168. //记录渲染的图片序列号
  169. number=1;
  170. //调用15次框架函数之后,再渲染另外的图片
  171. rendspeed=15;
  172. StandOrWalk = 1;//站立
  173. JumpOrParticle=1;//跳跃
  174. //粒子系统的一些变量
  175. //第一个粒子系统的一些变量
  176. x0=150.0f;
  177. xp=150.0f; yp=100.0f;
  178. dx=0.0f,dy=0.0f;
  179. //第二个粒子系统的一些变量
  180. x02=150.0f;
  181. xp2=150.0f; yp2=100.0f;
  182. dx2=0.0f,dy2=0.0f;
  183.     
  184. speed=90;//粒子移动速度
  185. friction=0.98f;//摩擦系数
  186. //菜单项的位置
  187. caidanx1=450.0f;
  188.     caidanx2=450.0f;
  189.     caidanx3=450.0f;
  190. xianshi=false;
  191. }