天龙源码分析 - 伤害显示

一 天龙伤害显示是通过配置表实现不同伤害显示的,里面记载了各种伤害的显示速度,加速度,颜色等信息

 

             < Property Name = " XSpeed "  Value = " type:0 value:0 "   />                      <!-- X轴初始移动速度 -->
            
< Property Name = " YSpeed "  Value = " type:0 value:-200 "   />              <!-- Y轴初始移动速度 -->
            
< Property Name = " XAcceleration "  Value = " type:0 value:0 "   />      <!-- X轴初始移动加速度 -->
            
< Property Name = " YAcceleration "  Value = " type:0 value:100 "   /><!-- Y轴初始移动加速度 -->
            
< Property Name = " MaxLife "  Value = " type:0 value:2000 "   />              <!-- 生存期,多长时间后消失,毫秒 -->
            
< Property Name = " AlphaMode "  Value = " type:0 value:1 "   />              <!-- 是渐渐透明消失还是忽然消失,1为渐渐消失,0为透明度不变,生存期过后消失 -->
            
< Property Name = " XPos "  Value = " type:0 value:0 "   />                          <!-- 产生时的相对于初始值的X位置偏移 -->
            
< Property Name = " YPos "  Value = " type:0 value:0 "   />                          <!-- 产生时的相对于初始值的Y位置偏移 -->

 

二 所有伤害会添加到一个manager里面,添加一个新的伤害时,会遍历所有伤害,找到一个未占用的位置。

         if ( pBeHit -> m_nUseTempPos )
        {
            
//  判断是不是已经占用位置了
            std::list <  CBeHitBoard *   > ::iterator it;
            
int  bTemp[ CEGUI::MAX_TEMP_TYPE_NUMBER ];
            
for int  i  =   0 ; i  <  CEGUI::MAX_TEMP_TYPE_NUMBER; i  ++  )
                bTemp[ i ] 
=   false ;
            
for ( it  =  m_listBeHitBoard.begin(); it  !=  m_listBeHitBoard.end(); it ++ )
            {
                CBeHitBoard 
* pItem  =  (  * it );
                
//  如果同是自己的类型
                 if ( pBeHit -> m_nMoveType  ==  pItem -> m_nMoveType )
                {
                    
if ( abs(  int ( pItem -> m_nStartY  -  pBeHit -> m_nStartY ) )  <   50  )
                    {
                        bTemp[ pItem
-> m_nTempPosIndex ]  =   true ;
                    }
                }
            }
            
for int  i  =   0 ; i  <  CEGUI::MAX_TEMP_TYPE_NUMBER;i  ++  )
            {
                
if ! bTemp[ i ] )
                {
                    pBeHit
-> m_nTempPosIndex  =  i;
                    pBeHit
-> m_nStartX  +=  CBeHitBoardManager::GetMe() -> m_TempPoint[ i ].d_x;
                    pBeHit
-> m_nStartY  +=  CBeHitBoardManager::GetMe() -> m_TempPoint[ i ].d_y;
                    
break ;
                }
            }
        }

三 update里面更新信息

 

    m_nXSpeed  +=  (  float ( m_nXAcceleration )  /   1000  )  *  g_pTimer -> GetDeltaTime();
    m_nYSpeed 
+=  (  float ( m_nYAcceleration )  /   1000  )  *  g_pTimer -> GetDeltaTime();

    m_nStartX 
+=  (  float ( m_nXSpeed )  /   1000  )  *  g_pTimer -> GetDeltaTime();
    m_nStartY 
+=  (  float ( m_nYSpeed )  /   1000  )  *  g_pTimer -> GetDeltaTime();

    m_nLife 
-=  ( int )g_pTimer -> GetDeltaTime();

    
if ( m_bAlphaMode )
        m_fAlpha 
=   float ( m_nLife )  /   float ( m_nMaxLife );
    
if ( m_bDoubleHit )
    {
        
if ( m_bZoomOn )
        {
            m_fScale 
+=  m_fDoubleTime  /  g_pTimer -> GetDeltaTime();
            
if ( m_fScale  >  CBeHitBoardManager::GetMe() -> getDoubleSize() )
                m_bZoomOn 
=   false ;
        }
        
else
        {
            m_fScale 
-=  m_fDoubleTime  /  g_pTimer -> GetDeltaTime();
        }
        
        
if ( m_fScale  <  CBeHitBoardManager::GetMe() -> getDoubleEndSize() )
        {
            m_fScale 
=  CBeHitBoardManager::GetMe() -> getDoubleEndSize();
            m_bDoubleHit 
=   false ;
        }
        ((CEGUI::IFalagardBeHitBoard
* )(CEGUI::FalagardBeHitBoard * )m_pWindow ) -> setTextScale( m_fScale, m_fScale );    
        
    }
    
if ( m_nLife  >   0  )
    {
        CEGUI::Point fPos;
//         CEGUI::Size size = CEGUI::System::getSingleton().getRenderer()->getSize();
        fPos.d_x  =   float ( m_nStartX ); //  / size.d_width;
        fPos.d_y  =   float ( m_nStartY ); //  / size.d_height;
        ((CEGUI::IFalagardBeHitBoard * )(CEGUI::FalagardBeHitBoard * )m_pWindow ) -> setDisplayCenter( fPos.d_x, fPos.d_y );
        
if ( m_bAlphaMode )
            m_pWindow
-> setAlpha( m_fAlpha );
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值