11 C++¿Î³ÌÉè¼Æ_Ì«¿ÕÕ½»ú

2026/4/27 10:40:48

{

// Ö´ÐÐÎÒ·½Õ½»úµÄÑ­»·Tickº¯Êý if( m_pMyFighter )

m_pMyFighter->OnFire( fDeltaTime );

}

6¡¢µ«ÊÇÎÒÃÇ×Óµ¯Òª·¢Éä×Óµ¯Ö»Óе±¿Õ¸ñ¼ü°´ÏÂÉèÖÃCMyFighterµÄm_bCanFireֵΪ

true¡£ÔÚOnKeyDown·½·¨ÖÐÌí¼ÓÈçÏ´úÂ룻

// ÓÎÏ·½øÐÐÖУ¬°´Ï¿ոñ·¢Éä×Óµ¯

if( KEY_SPACE == iKey && NULL != m_pMyFighter ) m_pMyFighter->SetCanFire( true );

7¡¢Í¬ÀíÔÚOnKeyUpÖÐÉèÖÃm_bCanFireֵΪfalse¡£

ʵÑéÈý µÐ·½Õ½»ú

¡¾ÊµÑéÄÚÈÝ¡¿

1¡¢´´½¨Ò»¸öµÐ·½Õ½»úÀàCEnemyFighter£»

2¡¢Õ½»úÒԱ༭Æ÷ÖÐHorizontalSprite_Template¾«ÁéΪģ°å£» 3¡¢Ã¿¸ô5Ãë´´½¨Ò»¼ÜµÐ·½Õ½»ú£» 4¡¢µÐ·½Õ½»úÿ¸ô1Ãë·¢ÉäÒ»·¢×Óµ¯£» 5¡¢µÐ·½Õ½»ú·ÉÐÐÖÐÉÏϸ¡¶¯£»

¡¾ÊµÑé˼·¡¿

ÔËÓÃÃæÏò¶ÔÏó֪ʶ£¬´´½¨CEnemyFighterÀà¡£¸ÃÀà¾ßÓе㷽ս»úµÄÊôÐÔ£¬Õ½»ú¸ôÒ»¶¨µÄʼþ±»¸´ÖƳöÀ´£¬È»ºóÉÏϸ¡¶¯£¬¿ªÊ¼ÏòÎÒ·½Õ½»ú·¢Éä×Óµ¯£¬ÕâÑùÓÐÖúÓÚÔö¼ÓµÐ·½Õ½»úµÄɱÉËÁ¦£¬Ò²Ôö¼ÓÁËÓÎÏ·µÄȤζÐÔ¡£ ¡¾ÊµÑéÖ¸µ¼¡¿

1¡¢·ÂÕÕ·½±ãµÄ·½·¨´´½¨CEnemyFighterÀ࣬Æä¼Ì³ÐÓëCSpriteÀ࣬ÐÞ¸ÄÆä¹¹Ô캯Êý¡£ 2¡¢ÎªÀàÔöÌíÁ½¸ö¾²Ì¬±äÁ¿£¬Ò»¸ö±íʾ±íʾ´´½¨µÐ»úµÄÊýÁ¿£¬Ò»¸ö±íʾ´´½¨µÐ»úµÄʱ¼ä£»

static floatm_fCreateTime;// ´´½¨µÐ»úµÄʱ¼ä¼ä¸ô

static intm_iCreatedSpriteCount;//±íʾ´´½¨Õ½»úÊýÁ¿

²¢ÔÚLessonX.cppÎļþ×îºó½øÐгõʼ»¯£º float CEnemyFighter::m_fCreateTime = 0.f; int CEnemyFighter:: m_iCreatedSpriteCount = 0;

3¡¢ÎªCEnemyFighterÀàÌí¼ÓÒ»¸ö´´½¨µÐ·½Õ½»úµÄ¾²Ì¬·½·¨ClassTick(float fDeltaTime)¡£

1£©ÔÚEnemyFighterÀàÖÐÌí¼Óº¯ÊýµÄÉùÃ÷£º void static ClassTick( float fDeltaTime );

2£©Æä²ÎÊýΪÓÎÏ·µÄʱ¼ä¼ä¸ô¡£µ±´´½¨Õ½»úµÄʱ¼ä¼ä¸ôµÝ¼õΪ0ʱ£¬´´½¨Õ½»ú¡£²¢ÖØÐÂÉèÖÃʱ¼ä¼ä¸ôʱ¼äΪ5µ½10Ãë¡£

void CEnemyFighter::ClassTick( float fDeltaTime ) //´´½¨µÐ·½Õ½»ú {

// ÊÇ·ñµ½Ê±¼ä´´½¨

m_fCreateTime -= fDeltaTime; if( m_fCreateTime <= 0.f ) {

// Ëæ»úÒ»¸öʱ¼ä£¬×÷ΪÏ´γöÉúµÄʱ¼ä

8

ÉϺ£Èñ¸ñÈí¼þÓÐÏÞ¹«Ë¾

m_fCreateTime=(float)CSystem::RandomRange( 1, 3 ); //ÔÚÒÔÏÂÌí¼Ó´´½¨Ò»¼ÜµÐ·½Õ½»úµÄ´úÂë } }

2£©´´½¨Õ½»úʱ£¬Ö»ÐèÒªÕ½»ú²»ÏÔʾÔÚÊÀ½ç±ß½çÖ®Íâ¾Í¿ÉÒÔ£¬¼´YÖá×ø±êÔÚ±ÈÊÀ½ç±ß½çµÄÉÏϱ߽çÉÔ΢´óÒ»µãµÄ·¶Î§Ö®¼ä£¬ÔÚ´ËÎÒÃÇÉèÖñÈÊÀ½ç±ß½ç´ó10¸öÊÀ½ç×ø±êµ¥Î»¡£ÔÚClassTick·½·¨µÄif( m_fCreateTime <= 0.f )ÅжÏÖÐÌí¼ÓÒÔÏ´úÂ룺

IntiPosBase=CSystem::RandomRange((int)CSystem::GetScreenTop()+10,(int)CSystem::GetScreenBottom() - 10);

2£©È»ºóÉùÃ÷Ò»¸öCEnemyFighterÀà¶ÔÏó¡£È»ºóÉèÖõз½·É»úXÖáºÍYÖáµÄ×ø±ê,ÔÙ

´ÎÉèÖÃËÙ¶È£¬ÉèÖÃÊÀ½ç±ß½çÅöײÊôÐÔ£¬×ߺóÉèÖÃÆäÅöײģʽÒÔ¼°³õʼ»¯Æä³ÉÔ±±äÁ¿µÄÖµ¡£

charszName[MAX_NAME_LEN];

sprintf(szName,\¸øÐ½¨µÄµÐ·½Õ½»úÆðÃû m_iCreatedSpriteCount++;

CEnemyFighter *pSprite=new CEnemyFighter( szName );

pSprite->CloneSprite( \ //¿Ë¡ģ°å intiRandom=CSystem::RandomRange( iPosBase - 10, iPosBase + 10 ); floatfPosX=(int)CSystem::GetScreenRight() + 20.f; pSprite->SetSpritePosition( fPosX, (float)iRandom ); pSprite->SetSpriteLinearVelocityX( -10.f ); pSprite->SetSpriteWorldLimit(WORLD_LIMIT_KILL,

CSystem::GetScreenLeft()-10.f,CSystem::GetScreenTop(),CSystem::GetScreenRight() + 200.f, CSystem::GetScreenBottom() );

pSprite->SetSpriteCollisionActive(true,true);

pSprite->SetHp(300); pSprite->SetScore(100); pSprite->SetType(1);

ÕâÀïÓõ½sprintfº¯Êý£¬ËùÒÔÓ¦¸ÃÔÚEnemyFighter.cppÖаüº¬Í·Îļþ£º #include

4¡¢ÔÚÌí¼ÓCEnemyFighterÀàÖÐÌí¼ÓLoopTick·½·¨£¬ÊµÏÖÔÚÓÎÏ·Ñ­»·Ê±£¬Õ½»ú·¢Éä×Óµ¯

ºÍÉÏϸ¡¶¯·ÉÐеŦÄÜ¡£Æä²ÎÊýΪ£¬ÓÎÏ·µÄʱ¼ä¼ä¸ô¡£

1£©Ìí¼ÓÒ»¸ö³ÉÔ±±äÁ¿£¬±íʾս»ú´´½¨Ö®ºó£¬¸ô¶à¾Ã²Å¿ÉÒÔ¿ªÊ¼·¢Éä×Óµ¯¡£È·±£·É»úÒѾ­±»¿´¼û£¬²Å»á·¢Éä×Óµ¯¡£

float m_fCanFireAfterCreated;

2£©ÔÙÌí¼ÓÈý¸ö³ÉÔ±±äÁ¿£¬·Ö±ð±íʾ×Óµ¯µÄ·¢Éä¼ä¸ô£¬Õ½»ú·ÉÐÐʱÉÏϸ¡¶¯µÄʱ¼ä

¼ä¸ô£¬Õ½»ú·ÉÐÐʱÊÇÉϸ¡»¹ÊÇϸ¡¡£

float m_fBulletCreateTime; float m_fFloatTime; bool m_bFloatUp;

×¢Òâ°ÑÕâÕâЩ±äÁ¿ÔÚ¹¹Ô캯ÊýÖгõʼ»¯¡£

9

3£©È»ºóÔÚEnemyFighter.hÖÐÉùÃ÷º¯Êý£º

void LoopTick( float fDeltaTime );

ÔÚEnemyFighter.cppÖжԺ¯Êý½øÐÐʵÏÖ£º

void CEnemyFighter::LoopTick( float fDeltaTime ) { }

4£©ÔÚº¯ÊýÖÐÌí¼Ó´úÂ룬µ±±íʾս»ú´´½¨Ö®ºó£¬¸ô¶à¾Ã²Å¿ÉÒÔ¿ªÊ¼·¢Éä×Óµ¯µÄ±äÁ¿

µÝ¼õµ½Ð¡ÓÚµÈÓÚ0ʱ£¬¿ªÊ¼¿ÉÒÔ´´½¨×Óµ¯£¬È»ºó¿ªÊ¼µÝ¼õ×Óµ¯µÄ·¢Éä¼ä¸ô±äÁ¿£¬µ±µÝ¼õµ½Ð¡ÓÚµÈÓÚ0ʱ£¬Õ½»ú·¢Éä×Óµ¯¡£

m_fCanFireAfterCreated -= fDeltaTime; if( m_fCanFireAfterCreated <= 0.f ) {

m_fBulletCreateTime -= fDeltaTime; if( m_fBulletCreateTime <= 0.f ) {

m_fBulletCreateTime = 1.f;

g_GameMain.CreateBullet(GetSpritePositionX(), GetSpritePositionY()); } }

ÕâÀïÓõ½g_GameMainÕâ¸öÈ«¾Ö¶ÔÏó£¬ËùÒÔÓ¦¸ÃÔÚEnemyFighter.cppÖаüº¬Í·Îļþ£º #include\

5£©Ìí¼ÓÕ½»úÉÏϸ¡¶¯µÄ´úÂë¡£µ±Õ½»ú¸¡¶¯Ê±£¬Ê×ÏÈÀۼƸ¡¶¯µÄʱ¼ä£¬µ±¸¡¶¯Ê±¼ä´óÓÚ1ºÍСÓÚ0ʱ£¬ÐÞ¸ÄÉϸ¡»¹ÊÇϸ¡µÄ±äÁ¿Öµ¡£È»ºó»ñµÃÕ½»ú´ËʱµÄYÖá×ø±ê£¬ÎÒÃÇÉèÖÃÉÏϸ¡¶¯µÄËÙ¶ÈΪ6£¬ÕâÑù¾Í¿ÉÒÔ¼ÆËã³ö¸¡¶¯ºóµÄYÖá×ø±ê¡£

if( m_bFloatUp ) {

m_fFloatTime += fDeltaTime; if( m_fFloatTime >= 1.f ) {

m_bFloatUp = false; }

floatfPosY=GetSpritePositionY(); fPosY+=6.f * fDeltaTime; SetSpritePositionY( fPosY ); } else {

m_fFloatTime -= fDeltaTime; if( m_fFloatTime <= 0.f ) {

m_bFloatUp = true; }

floatfPosY=GetSpritePositionY();

10

ÉϺ£Èñ¸ñÈí¼þÓÐÏÞ¹«Ë¾ fPosY-=6.f * fDeltaTime; SetSpritePositionY( fPosY ); }

5¡¢ÔÚCGameRunÖУ¬µ÷ÓÃCEnemyFighterÀàµÄ¾²Ì¬·½·¨ClassTick,ÈÃÓÎÏ·²»Í£µÄ´´½¨µÐ

·½Õ½»ú¡£

CEnemyFighter::ClassTick( fDeltaTime );

ʵÑéËÄ µÐ·½Õ½»ú·¢Éä×Óµ¯

¡¾ÊµÑéÄÚÈÝ¡¿

1¡¢´´½¨Ò»¸ö¾«ÁéÁ´½ÓÀࣻ

2¡¢½«Éú³ÉµÄÕ½»úÌí¼Óµ½Á´±íÖУ»

¡¾ÊµÑé˼·¡¿

ΪÁ˱ãÓÚ¶Ô¸÷ÖÖ¾«ÁéµÄ¹ÜÀí£¬ÎÒÃÇʹÓÃÁ´±íÀ´¶ÔÕâЩ¾«Áé¹ÜÀí£¬±ÈÈ羫Áé·¢ÉúÅöײ֮ºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ý±éÀúÁ´±íÀ´ÅжÏÊÇÁ´±íÖеÄÄǸö¾«Áé·¢ÉúÁËÅöײ£¬Í¬Ñùɾ³ý²Ù×÷ʹÓÃÁ´±íÒ²·Ç³£µÄ±ãÀû¡£

¡¾ÊµÑéÖ¸µ¼¡¿

1¡¢ÎªCBulletÌí¼ÓÒ»¸ö±íʾ¸Ã×Óµ¯ÊÇË­·¢ÉäµÄ±äÁ¿¡£

intm_iType;

2¡¢ÔÚCBulletÀ๹Ô캯ÊýÖÐΪ´Ë±äÁ¿¸³Öµ£¬¸ü¸Ä¹¹Ô캯ÊýΪÈý¸ö²ÎÊý£º

CBullet::CBullet(const int iType, const char *szName) : CSprite( szName )

{

m_iType = iType; }

3¡¢ÐÞ¸ÄCGameMainÀàµÄCreateBullet·½·¨,×¢ÒâͬʱÐ޸ĺ¯ÊýÉùÃ÷¡£

void CGameMain::CreateBullet( int iType, const float fPosX, const float fPosY ) {

¡­¡­

if( 1 == iType ) //Èç¹ûiTypeֵΪ1£¬Ôò˵Ã÷×Óµ¯ÎªµÐ·½Õ½»ú·´Éä¡£ {

pBullet->SetSpriteLinearVelocityX( -30 ); }

else//ÆäËûÇé¿ö˵Ã÷ΪÎÒ·½Õ½»ú·´Éä {

pBullet->SetSpriteFlipX( true ); pBullet->SetSpriteLinearVelocityX( 60 ); }

pBullet->SetScore(100); pBullet->SetDamage(100); pBullet->SetHp(10); pBullet->SetType(iType);

pBullet->SetSpriteCollisionActive(true,true);

11


11 C++¿Î³ÌÉè¼Æ_Ì«¿ÕÕ½»ú.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ
ËÑË÷¸ü¶à¹ØÓÚ£º 11 C++¿Î³ÌÉè¼Æ_Ì«¿ÕÕ½»ú µÄÎĵµ
Ïà¹ØÍÆ¼ö
Ïà¹ØÔĶÁ
¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÏÂÔØ±¾ÎĵµÐèÒªÖ§¸¶ 10 Ôª

Ö§¸¶·½Ê½£º

¿ªÍ¨VIP°üÔ»áÔ± ÌØ¼Û£º29Ôª/ÔÂ

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºxuecool-com QQ£º370150219