cSprite.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. // CMAIN LIB - APPLICATION AND DIRECT WRAPPER
  2. //
  3. // Written by Mauricio Teichmann Ritter
  4. //
  5. // Copyright (C) 2002, Brazil. All rights reserved.
  6. // 
  7. //
  8. // cSprite.cpp: implementation of the cSprite class.
  9. //
  10. //////////////////////////////////////////////////////////////////////
  11. #include "stdafx.h"
  12. #include "cSprite.h"
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. cSprite::cSprite()
  17. {
  18. }
  19. cSprite::~cSprite()
  20. {
  21. }
  22. void cSprite::Destroy()
  23. {
  24. m_surfTile.Destroy();
  25. }
  26. BOOL cSprite::Draw(LPDIRECTDRAWSURFACE7 lpDest, int iDestX, int iDestY, BOOL bAdvance, int iSrcX, int iSrcY, int iWidth, int iHeight)
  27. {
  28. int iCol, iRow;
  29. iCol = m_iAbsolutePosition % m_iCols;
  30. iRow = m_iAbsolutePosition / m_iCols;
  31. if(bAdvance)
  32. Next();
  33. if(iWidth == -1)
  34. iWidth = m_iSpriteWidth;
  35. if(iHeight == -1)
  36. iHeight = m_iSpriteHeight;
  37. return m_surfTile.Draw(lpDest, iDestX, iDestY, (iCol * m_iSpriteWidth)+iSrcX, (iRow * m_iSpriteHeight)+iSrcY, iWidth, iHeight);
  38. }
  39. BOOL cSprite::Create(HINSTANCE hInst, UINT nResource, int iTileWidth, int iTileHeight, COLORREF dwColorKey, int iSpriteWidth,int iSpriteHeight)
  40. {
  41. Destroy();
  42. m_surfTile.Create(iTileWidth, iTileHeight, dwColorKey);
  43. m_surfTile.LoadBitmap(hInst, nResource);
  44. m_iCols = iTileWidth  / iSpriteWidth;
  45. m_iRows = iTileHeight / iSpriteHeight;
  46. m_iSpriteWidth  = iSpriteWidth;
  47. m_iSpriteHeight = iSpriteHeight;
  48. m_iAbsolutePosition = 0;
  49. return TRUE;
  50. }
  51. void cSprite::Next()
  52. {
  53. m_iAbsolutePosition++;
  54. if(m_iAbsolutePosition > (m_iCols * m_iRows - 1))
  55. m_iAbsolutePosition = 0;
  56. }
  57. void cSprite::Previous()
  58. {
  59. m_iAbsolutePosition--;
  60. if(m_iAbsolutePosition < 0)
  61. m_iAbsolutePosition = (m_iCols * m_iRows - 1);
  62. }
  63. BOOL cSprite::IsEnd()
  64. {
  65. if(m_iAbsolutePosition == (m_iCols * m_iRows - 1))
  66. return TRUE;
  67. else
  68. return FALSE;
  69. }
  70. BOOL cSprite::IsBegin()
  71. {
  72. if(m_iAbsolutePosition == 0)
  73. return TRUE;
  74. else
  75. return FALSE;
  76. }
  77. void cSprite::Rewind()
  78. {
  79. m_iAbsolutePosition = 0;
  80. }