📄 ch17p2_tiletransition.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 + -