float
MoveAngle = 0.0f; // -
int SpriteIndex = 1;
bool Mirrored = false;
//
,
//
switch ( m_dwFleHeroMoveState )
{
case FleHeroMoveState_MoveLeft: {
MoveAngle = D3DX_PI;
SpriteIndex = FleHero_MoveLeft;
m_bFleHeroLookLeft = true;
break;
}
case FleHeroMoveState_MoveDown: {
MoveAngle = -D3DX_PI * 0.75f;
SpriteIndex = FleHero_MoveRight;
Mirrored = true;
m_bFleHeroLookLeft = true;
break;
}
case FleHeroMoveState_MoveRight: {
MoveAngle = 0.0f;
SpriteIndex = FleHero_MoveRight;
m_bFleHeroLookLeft = false;
break;
}
case FleHeroMoveState_MoveUp: {
MoveAngle = D3DX_PI * 0.25f;
SpriteIndex = FleHero_MoveLeft;
Mirrored = true;
m_bFleHeroLookLeft = false;
break;
}
}
float x_step = 0.0f;
float y_step = 0.0f;
// x y,
x_step = FleHero_MoveSpeedX * g_fElapsedTime * g_fFleHero_MoveSpeed_Decrease;
float OldFleHeroXPos = m_vFleHeroPos.x;
m_vFleHeroPos.x += x_step * (float)cos(MoveAngle);
if ( m_vFleHeroPos.x <= SceneMoveLimitLeft )
m_vFleHeroPos.x = OldFleHeroXPos;
if ( m_vFleHeroPos.x >= SceneMoveLimitRight )
m_vFleHeroPos.x = OldFleHeroXPos;
g_fFleHeroPos_x = m_vFleHeroPos.x;
y_step = FleHero_MoveSpeedY * g_fElapsedTime * g_fFleHero_MoveSpeed_Decrease;
float OldFleHeroYPos = m_vFleHeroPos.y;
m_vFleHeroPos.y += y_step * (float)sin(MoveAngle);
if ( m_vFleHeroPos.y <= SceneMoveLimitDown )
m_vFleHeroPos.y = OldFleHeroYPos;
if ( m_vFleHeroPos.y >= SceneMoveLimitUp )
m_vFleHeroPos.y = OldFleHeroYPos;
TestHeroCollision();
/*
-
*/
if ( m_CollSide.fromRight && m_dwFleHeroMoveState == FleHeroMoveState_MoveRight
)
{
m_vFleHeroPos.x = m_v2FleHeroPosBeforeCollision.x;
g_fFleHeroPos_x = m_vFleHeroPos.x;
x_step = 0.0f;
}
else {
if ( m_CollSide.fromLeft && m_dwFleHeroMoveState == FleHeroMoveState_MoveLeft
)
{
m_vFleHeroPos.x = m_v2FleHeroPosBeforeCollision.x;
g_fFleHeroPos_x = m_vFleHeroPos.x;
x_step = 0.0f;
}
}
if ( m_CollSide.fromTop && m_dwFleHeroMoveState == FleHeroMoveState_MoveUp
)
{
m_vFleHeroPos.y = m_v2FleHeroPosBeforeCollision.y;
y_step = 0.0f;
}
else {
if ( m_CollSide.fromBottom && m_dwFleHeroMoveState == FleHeroMoveState_MoveDown
)
{
m_vFleHeroPos.y = m_v2FleHeroPosBeforeCollision.y;
y_step = 0.0f;
}
}
/*
-
*/
m_pGameSceneDataFile->m_fHeroXPosInLocation = g_fHorizontalScrollOffset;
m_pGameSceneDataFile->CalcCurrentSceneNumber();
if ( !CanEnterScene() )
{
x_step = 0.0f;
}
LPD3D9SPRITE spr = GetGameSprite( SpriteIndex, m_pTexArray );
// Z
Y
m_vFleHeroPos.z = CalcFleHeroZ(m_vFleHeroPos.y + FleHero_YCorrectorForZ,
spr->m_Scale.y, spr->Height);
if ( x_step != 0.0f || y_step != 0.0f )
{
CalcFleHeroScrPos2(Mirrored);
//
m_bFleHeroXMirrored = Mirrored;
}
AnimGameSprite(SpriteIndex, -1, m_pTexArray); |