{
((CEnemyFighter *)pSprite)->LoopTick(fDeltaTime); }}
17¡¢ÔÚGameEndÖÐÌí¼Ó´úÂ룬Çå¿ÕËùÓо«Á飬ÏÔʾ¿Õ¸ñ¿ªÊ¼¡£
m_pBeginSprite->SetSpriteVisible(true); m_SpriteList.DeleteAllSprite(true); m_pMyFighter->SetSpriteVisible(false); delete m_pMyFighter; m_pMyFighter = NULL;
ʵÑéÎå Ìí¼ÓÅöײ¼ì²â
¡¾ÊµÑéÄÚÈÝ¡¿
1¡¢´´½¨Ò»¸ö¾«Á鸸ÀàCGameSprite£»
2¡¢½«Õ½»úÀàºÍ×Óµ¯Àà¸ÄΪ¼Ì³ÐÓÚCGameSpriteÀࣻ
3¡¢ÎªÓÎÏ·Öеľ«ÁéÌí¼ÓHPÊôÐÔ£¬²¢Îª×Óµ¯Ìí¼ÓÆÆ»µÁ¦µÄÊôÐÔ¡£ 4¡¢CGameSpriteÀàÌí¼Ó¼ì²âÅöײµÄÐ麯Êý£¬²¢ÔÚ¸÷×ÓÀàÖÐʵÏÖ£» 5¡¢µ±Íæ¼ÒÕ½»úµÄHPֵСÓÚ0ÊÇÓÎÏ·½áÊø¡£
¡¾ÊµÑé˼·¡¿
¼ì²âÅöײʱ£¬ÎÒÃÇÏÈ»ñÈ¡ÅöײµÄË«·½£¬È»ºóÔÙ½«Æä¸÷×Ô×öÅöײ¼ì²â¡£²¢ÇÒ²úÉúÅö×²ÌØÐ§£¬ÊÇÓÎÏ·¿´ÆðÀ´¸ü¼Ó±ÆÕæ¡£ÓÃÐ麯ÊýµÄ·½Ê½ÊµÏÖ¶à̬¡£
¡¾ÊµÑéÖ¸µ¼¡¿
1¡¢·ÖÎöÎÒ·½Õ½»úÀà¡¢µÐ·½Õ½»úÀà¡¢×Óµ¯ÀàµÄ¹²Í¬ÌØÐÔ£¬ÎÒÃÇÌáÈ¡ËüÃǵÄÕâЩ¹²ÐÔ£¬´´
½¨ËüÃǵĸ¸ÀàCGameSpriteÀ࣬ʹµÃÎÒ·½Õ½»ú¡¢µÐ·½Õ½»úºÍ×Óµ¯Àà¶¼¼Ì³ÐÓÚCGameSpriteÀà¡£·ÂÕÕÉϱ߷½·¨´´½¨CGameSpriteÀࣺ
class CGameSprite : public CSprite { private: public:
CGameSprite( const char *szName ); virtual ~CGameSprite() { };
};
×¢ÒâÐ޸Ĺ¹Ô캯Êý¡£
2¡¢ÎªCGameSpriteÀàÌí¼ÓÉúÃüÖµ¡¢ÅöÉϵз½£¬¸øµÐ·½Ôì³ÉµÄÉ˺¦ÖµºÍ»÷»Ù±¾Sprite½«
»ñµÃµÄ»ý·ÖÖµÒÔ¼°¾«ÁéÀàÐÍ¡£²¢ÎªÕâËĸö¸öÊôÐÔÌí¼ÓSetºÍGet·½·¨
int m_iHp; int m_iDamage; int m_iScore; int m_iType;
3¡¢Ìí¼ÓIsDead·½·¨¡£µ±m_iHpСÓÚµÈÓÚ0ʱ£¬¾«ÁéΪËÀÍö״̬¡£
boolIsDead(){ return ( GetHp() <= 0 ); }
4¡¢Ìí¼ÓIsMyBullet£¬·½·¨ÅжÏ×Óµ¯ÊÇË·¢ÉäµÄ¡£
// ×Óµ¯ÀàרÓú¯Êý.ÅжÏ×Óµ¯ÊÇÄÄ·½·¢ÉäµÄ
16
ÉϺ£Èñ¸ñÈí¼þÓÐÏÞ¹«Ë¾ virtual boolIsMyBullet() { return false; } 5¡¢Ìí¼ÓIsMyFighter£¬ÅжÏÊÇ·ñΪÎÒ·½Õ½»ú¡£
virtual boolIsMyFighter(){ return false; }
6¡¢Ìí¼ÓÐ麯ÊýOnColOtherSprite£¬´¦Àí¾«ÁéÖ®¼äµÄÅöײ¡£
virtual voidOnColOtherSprite( CGameSprite *pOther );
7¡¢½«CBullet¡¢CMyFighterºÍCEnemyFighterÈý¸öÀàµÄ¸¸Àà¸ÄΪCGameSprite¡£ ×¢ÒâÐèÒªÐ޸ĸ÷×ԵĹ¹Ô캯Êý²¢°üº¬Í·Îļþ: #include\8¡¢ÐÞ¸ÄCSpriteListÀàÖеĺ¯Êý²ÎÊýÒÔ¼°·µ»ØÖµ£¬½«ÔÏÈËùÓеÄCSprite * ¸ü¸ÄΪ
CGameSprite *£»²¢½«½á¹¹ÌåÖеÄCSprite * pSprite£» ¸ÄΪCGameSprite * pSprite; 9¡¢ÔÚCMyFightÖÐÌí¼Óº¯Êý£º
bool IsMyFighter(){ return true; }
ÔÚCGameMainµÄGameInitº¯ÊýÖÐÌí¼Ó´úÂë³õʼ»¯Êý¾Ý£¬ÔÚGameInitº¯Êý×îºóÌí¼Ó´úÂ룺
m_pControlSprite->SetHp( 500 ); m_pControlSprite->SetScore( 0 );
m_pControlSprite->SetCanFire( true );
10¡¢ÔÚCGameMainÖÐÌí¼Óͨ¹ýË÷ÒýÖµ»òÕßÃû×Ö»ñÈ¡¾«ÁéµÄÁ½¸öº¯Êý£¬£º
CGameSprite *CGameMain::GetSprite( const int iIndex ) {
return m_SpriteList.GetSprite(iIndex); }
CGameSprite *CGameMain::GetSprite( const char *szName ) {
return m_SpriteList.GetSprite(szName); } 11¡¢ÎªCBulletÌí¼ÓOnColOtherSprite·½·¨£¬²¢ÊµÏÖ´Ë·½·¨¡£
void CBullet::OnColOtherSprite( CGameSprite *pOther )
{
if( NULL == pOther ) return; if(IsMyBullet () ) {
if( pOther->IsMyFighter () ) return;
SetHp( GetHp() - pOther->GetDamage() ); } else {
if( pOther->IsMyFighter () || pOther->IsMyBullet () ) {
SetHp( GetHp() - pOther->GetDamage() ); }
17
} }
×¢ÒâÒòΪÓõ½È«¾Ö¶ÔÏóg_GameMain£¬ËùÒÔÐèÒªÉùÃ÷Í·Îļþ£¬µÚ10²½Í¬£º #include\
12¡¢ÔÚCGameMainÖÐÌí¼Óº¯Êý£¬»ñÈ¡¿ØÖƵľ«Áé¶ÔÏó¡£
ÔÚLessonX.hÖÐÉùÃ÷£º CMyFight * GetMyFight(); ÔÚLessonX.cppÖÐÌí¼Ó¶¨Ò壺
CMyFight * CGameMain::GetMyFight() {
if (NULL != m_pMyFighter) {
return m_pMyFighter; } }
13¡¢ÎªCMyFightrÌí¼ÓOnColOtherSprite·½·¨£¬²¢ÊµÏÖ´Ë·½·¨¡£
void CMyFight::OnColOtherSprite( CGameSprite *pOther ) {
if( NULL == pOther ) return;
if( pOther-> IsMyBullet () ) return;
SetHp( GetHp() - pOther->GetDamage() ); if( GetHp() <= 200 ) {
SetSpriteColorGreen( 0 ); SetSpriteColorBlue( 0 ); }
else if( GetHp() <= 500 ) {
SetSpriteColorGreen( 128 ); SetSpriteColorBlue( 128 ); } else {
SetSpriteColorGreen( 255 ); SetSpriteColorBlue( 255 ); }
//¸üлý·ÖÏÔʾ
g_GameMain.GetMyFight()->SetScore( g_GameMain.GetMyFighter()->GetScore() +
pOther->GetScore() );
}
14¡¢ÎªCEnemyFighterÌí¼ÓOnColOtherSprite·½·¨£¬²¢ÊµÏÖ´Ë·½·¨¡£
18
ÉϺ£Èñ¸ñÈí¼þÓÐÏÞ¹«Ë¾ void CEnemyFighter::OnColOtherSprite( CGameSprite *pOther ) {
if( NULL == pOther ) return;
if( pOther-> IsMyFighter () || pOther-> IsMyBullet () ) {
SetHp( GetHp() - pOther->GetDamage() ); if (IsDead()) {
g_GameMain.GetMyFight()->SetScore(g_GameMain.GetMyFight()->GetScore() GetScore());
} } }
+
15¡¢ÔÚCGameMainÀàÖÐÌí¼Óº¯Êý£¬Í¨¹ýÃû×ÖÅжÏÊÇ·ñÊÇÎÒ·½Ì¹¿Ë£º
bool CGameMain::IsMyFighter( const char *szName ) {
return (strcmp( m_ pMyFighter ->GetName(), szName ) == 0); }
16¡¢µÄOnSpriteColSprite·½·¨ÖÐÌí¼ÓÅöײ¼ì²â¡£
voidCGameMain::OnSpriteColSprite( const char *szSrcName, const char *szTarName ) {
if( 2 != GetGameState() ) return;
CGameSprite*pSrcSprite =IsMyFighter
GetSprite( szSrcName );
CGameSprite *pTarSprite=IsMyFighter
GetSprite( szTarName );
if( NULL == pSrcSprite || NULL == pTarSprite ) return;
pSrcSprite->OnColOtherSprite( pTarSprite ); pTarSprite->OnColOtherSprite( pSrcSprite );
if( !pSrcSprite-> IsMyFighter () ) {
if( pSrcSprite->IsDead() )
g_GameMain.DeleteSprite( pSrcSprite, true ); }
if( !pTarSprite-> IsMyFighter () ) {
if( pTarSprite->IsDead() )
19
(szSrcName (szTarName
) )
? ?
m_pMyFighter m_pMyFighter
::