UI的移动和渐隐渐显 实现简单却能给游戏加载或场景过度一个不错的效果
废话不说 上一个简单的代码
废话不说 上一个简单的代码
#define UI_FADE_SPEED 1
#define UI_MOVE_SPEED 1
//
设置移动目标
void
SetMove(
int
nDstX,
int
nDstY )
{
m_nMoveToX = nDstX;
m_nMoveToY = nDstY;
m_dwMoveStartTime = TimeGetTime();
}
//
移动 Updating
if
( m_bMoving )
{
int na = m_nMoveToY - rcReal.top;
int nb = m_nMoveToX - rcReal.left;
int nc = sqrt( ( FLOAT )( na * na ) + ( FLOAT )( nb * nb ) );
int nX = 0;
int nY = 0;
int nMoveDistance = UI_MOVE_SPEED * ( TimeGetTime() - m_dwMoveStartTime );
if ( nMoveDistance >= nc )
{
m_bMoving = false;
nX = m_nMoveToX;
nY = m_nMoveToY;
}
else
{
nX = nMoveDistance * nb / nc + rcReal.left;
nY = nMoveDistance * na / nc + rcReal.top;
}
SetPos( nX, nY );
}
![]()
//
显示UI 可以开启渐隐渐显
void
SetVisable(
bool
bVisable ,
bool
bFadeInOrOut
=
false
,
int
nCurAlpha
=
0x88
,
int
nMaxAlpha
=
0xFF
,
int
nMinAlpha
=
0x00
)
{
m_bVisable = bVisable;
m_nFadeCurColorA = nCurAlpha;
m_bFadeInorFadeOut = bFadeInOrOut;
if ( bVisable )
m_dwFadeStartTime = TimeGetTime();
}
![]()
//
淡入淡出 Rendering
if
( m_bFadeInorFadeOut )
{
if ( IsVisable() )
{
m_nFadeCurColorA = UI_FADE_SPEED * ( TimeGetTime() - m_dwFadeStartTime );
if ( m_nFadeCurColorA >= m_nMaxFade )
{
m_nFadeCurColorA = m_nMaxFade;
m_bFadeInorFadeOut = false;
}
}
else
{
m_nFadeCurColorA = 0xff - UI_FADE_SPEED * ( TimeGetTime() - m_dwFadeStartTime );
if ( m_nFadeCurColorA <= m_nMinFade )
{
m_nFadeCurColorA = m_nMinFade;
m_bFadeInorFadeOut = false;
}
}
}
#define UI_MOVE_SPEED 1