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

游戏引擎

开发平台:

Visual C++

  1. #ifndef _JUMPINGBLOCK_HPP
  2. #define _JUMPINGBLOCK_HPP
  3. //-----------------------------------------------------------------------------------------------------
  4. class JumpingBlock: public GameObject
  5. {
  6. private:
  7. int mCol;
  8. int mRow;
  9. JQuad* mBlock;
  10.     Question* question;
  11. int    questionNO;
  12. bool mGoingUp;
  13. bool banana;
  14. float mOldY;
  15. TileMap* mMap;
  16. u8 mTileInfo;
  17. short mTile;
  18. public:
  19. bool questioned;
  20. JumpingBlock(GameStatePlay* app);
  21. virtual ~JumpingBlock();
  22. virtual void Update(float dt);
  23. virtual void Render();
  24. void SelectBlock(int n);
  25.     
  26. void Animate(int col, int row);
  27. };
  28. JumpingBlock::JumpingBlock(GameStatePlay* app): GameObject(app)
  29. {
  30. mMap = mApp->GetTileMap();
  31. mBlock = new JQuad(mTexture, 0.0f, 96.0f, 32.0f, 32.0f);
  32.    // questioned = false;
  33. }
  34. JumpingBlock::~JumpingBlock()
  35. {
  36. }
  37. void JumpingBlock::Update(float dt)
  38. {
  39. if (mGoingUp)
  40. {
  41. if (mTileInfo == BLOCK_BANANA)
  42. {
  43.                  mMap->SetTileInfo(mCol, mRow, 0);
  44.  banana = true;
  45.  questioned = false;
  46.  mApp->SetBanana(mApp->GetBanana()+1);
  47.  
  48.   
  49. }
  50. else if (mTileInfo == BLOCK_APPLE)
  51. {
  52. //JumpingCoin* banana = mApp->GetJumpingCoin();
  53.                  mMap->SetTileInfo(mCol, mRow, 0);
  54.  banana = false;
  55. questioned = false;
  56.  mApp->SetBanana(mApp->GetApple()+1);
  57. }
  58. else if(mTileInfo == BLOCK_QUES)
  59. {
  60. banana = false;
  61. }
  62. else
  63. {
  64. mY -= BLOCK_SPEED*dt;
  65. if (mY < mOldY-16.0f)
  66. {
  67. mGoingUp = false;
  68. }
  69. }
  70. //if(!questioned)
  71. }
  72. else
  73. {
  74. mY += BLOCK_SPEED*dt;
  75. if (mY > mOldY)
  76. {
  77. mY = mOldY;
  78. mActive = false;
  79. mMap->SetTile(mCol, mRow, mTile);
  80. mMap->SetTileInfo(mCol, mRow, mTileInfo);
  81. if (mTileInfo == BLOCK_APPLE)
  82. {
  83. questioned = false;
  84. mApp->SetApple(mApp->GetApple()+1);
  85. }
  86. if(mTileInfo == BLOCK_QUES)
  87. {
  88. mMap->SetTile(mCol, mRow,TILE_BRICK );
  89. mMap->SetTileInfo(mCol, mRow, 1);
  90. SelectBlock(1);
  91. }
  92. }
  93. }
  94. }
  95. void JumpingBlock::Render()
  96. {
  97. float x, y;
  98. mMap->GetPosition(&x, &y);
  99. if(!banana)
  100. {
  101.      mEngine->RenderQuad(mBlock, mX-x, mY-y);   
  102. }
  103. banana = false;
  104. }
  105. void JumpingBlock::SelectBlock(int n)
  106. {
  107. float x, y, w, h;
  108.     
  109. mBlock->GetTextureRect(&x, &y, &w, &h);
  110. mBlock->SetTextureRect((float)(n*32), y, w, h);
  111. }
  112. void JumpingBlock::Animate(int col, int row)
  113. {
  114. short tile = mMap->GetTile(col, row);
  115. u8 info = mMap->GetTileInfo(col, row);
  116. //if (tile != 0)
  117. {
  118. if (info == BLOCK_QUES || info == BLOCK_WEASEL)
  119. {
  120. if (info == BLOCK_QUES)
  121. {
  122. SelectBlock(0);
  123.                 questioned = true;
  124.     questionNO=mApp->questionNO;
  125.             questionNO++;
  126.    mApp->questionNO=questionNO;
  127. SelectBlock(1);
  128.                 mApp->PlaySfx(SFX_HITWALL);
  129. }
  130. mTile = tile;
  131. mTileInfo = info;
  132. mCol = col;
  133. mRow = row;
  134. mGoingUp = true;
  135. mActive = true;
  136. mX = (float) (col << TILE_SHIFT);
  137. mY = (float) (row << TILE_SHIFT);
  138. mOldY = mY;
  139. mMap->SetTile(col, row, TILE_BRICK);
  140. //SelectBlock(1);
  141. mMap->SetTileInfo(col, row, BLOCK_SOLID);
  142. }
  143. else if (info == BLOCK_BANANA||info == BLOCK_APPLE)
  144. {
  145. // questioned = false;
  146. mCol = col;
  147. mRow = row;
  148. mMap->SetTile(col, row, 0);
  149. mMap->SetTileInfo(col, row, 0);
  150. }
  151. else if (info == BLOCK_SOLID)
  152. {
  153. }
  154. }
  155. }
  156. #endif