⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch17p2_tiletransition.cpp

📁 游戏开发特殊技巧-special.effects.game.programming
💻 CPP
字号:
#include "Ch17p2_TileTransition.h"

// tile behavior classes ////////////////////////////////////////////////////

void CTileTransitionBehavior_Shrink::Setup(int iIndexX, int iIndexY, float x, float y, int iNumTilesX, int iNumTilesY, 
                                      LPDIRECT3DDEVICE8 pDev)
{
  CTileBehavior::Setup(iIndexX, iIndexY, x, y, iNumTilesX, iNumTilesY, pDev);
  m_fFadeTime = 0.0f;
}

void CTileTransitionBehavior_Shrink::Update(float fElapsedTime)
{
  m_fFadeTime += fElapsedTime;
  m_fScaleFactor = 1.0f - (m_fFadeTime / m_fDuration);
  if (m_fScaleFactor < 0.000001f) m_fScaleFactor = 0.000001f;
}

void CTileTransitionBehavior_Shrink::Render(D3DXMATRIX mFinalScale)
{

  float fPosX = m_fX + ((2.0f / (float)m_iNumTilesX) / 2.0f);
  float fPosY = m_fY + ((2.0f / (float)m_iNumTilesY) / 2.0f);

  D3DXMATRIX matFinal, mat1,mat2,mat3,mat4,mat5;
  D3DXMatrixIdentity(&mat1);
  
  // scale quad to correct size
  D3DXMatrixScaling(&mat3, 1.0f / (float)m_iNumTilesX, 1.0f / (float)m_iNumTilesY, 1);
  D3DXMatrixMultiply(&m_matPosition, &mat3, &mat1);
  
  // apply animating scale factor
  D3DXMatrixScaling(&mat3, m_fScaleFactor, m_fScaleFactor, 1);
  D3DXMatrixMultiply(&m_matPosition, &m_matPosition, &mat3);
  
  // move quad to correct position
  D3DXMatrixTranslation(&mat2, fPosX, fPosY, 0);
  D3DXMatrixMultiply(&m_matPosition, &m_matPosition, &mat2);

  
  D3DXMatrixMultiply(&matFinal, &m_matPosition, &mFinalScale);
  CTileBehavior::Render(matFinal); // apply the matrix and draw the triangle
}

void CTileTransitionBehavior_TwirlAndShrink::Setup(int iIndexX, int iIndexY, float x, float y, int iNumTilesX, int iNumTilesY, 
                                      LPDIRECT3DDEVICE8 pDev)
{
  CTileBehavior::Setup(iIndexX, iIndexY, x, y, iNumTilesX, iNumTilesY, pDev);
  m_fFadeTime = 0.0f;
}

void CTileTransitionBehavior_TwirlAndShrink::Update(float fElapsedTime)
{
  m_fFadeTime += fElapsedTime;
  m_fScaleFactor = 1.0f - (m_fFadeTime / m_fDuration);
  if (m_fScaleFactor < 0.000001f) m_fScaleFactor = 0.000001f;
}

void CTileTransitionBehavior_TwirlAndShrink::Render(D3DXMATRIX mFinalScale)
{
  float fPosX = m_fX + ((2.0f / (float)m_iNumTilesX) / 2.0f);
  float fPosY = m_fY + ((2.0f / (float)m_iNumTilesY) / 2.0f);

  D3DXMATRIX matFinal, mat1,mat2;
  D3DXMatrixIdentity(&mat1);
  
  // scale quad to correct size
  D3DXMatrixScaling(&mat2, 1.0f / (float)m_iNumTilesX, 1.0f / (float)m_iNumTilesY, 1);
  D3DXMatrixMultiply(&m_matPosition, &mat2, &mat1);
  
  // apply animating scale factor
  D3DXMatrixScaling(&mat1, m_fScaleFactor, m_fScaleFactor, 1);
  D3DXMatrixMultiply(&m_matPosition, &m_matPosition, &mat1);
  
  // apply animating rotation factor
  D3DXMatrixRotationYawPitchRoll(&mat1, 0, 0, (2*PI)*(m_fFadeTime / m_fDuration)*((float)(m_iIndexX+1)/(float)m_iNumTilesX));
  D3DXMatrixMultiply(&m_matPosition, &m_matPosition, &mat1);
  
  // move quad to correct position 
  D3DXMatrixTranslation(&mat1, fPosX, fPosY, 0);
  D3DXMatrixMultiply(&m_matPosition, &m_matPosition, &mat1);

  
  D3DXMatrixMultiply(&matFinal, &m_matPosition, &mFinalScale);
  CTileBehavior::Render(matFinal); // apply the matrix and draw the triangle
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -