<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                我方飛機的子彈和敵機子彈都在這個類中產生。將子彈專門設計成一個類,主要是為了方便擴展。之后如果想更換我方飛機子彈或者是敵機子彈,都會很方便。 類的功能很直觀,就是添加子彈、移除子彈 ~~~ void bindEnemyManager(EnemyManager* enemyManager); void BeginBulletShoot(float dt = 0.0f); // 開啟子彈射擊 void StopBulletShoot(); // 停止子彈射擊 void addBullet(float dt); // 添加子彈 void removeBullet(Node* pNode); // 移除子彈 void addEnemyBullet(float dt); // 添加敵機子彈 void removeEnemyBullet(Node* pNode); // 移除敵機子彈 ~~~ 添加的子彈像敵機一樣,存儲在容器中 ~~~ Vector<Sprite*> vecBullet; Vector<Sprite*> vecEnemyBullet; EnemyManager* m_enemyManager; ~~~ 想給敵機添加子彈,要將子彈類和敵機管理類綁定,通過敵機管理類中的容器,來獲取敵機對象。 我們通過對比敵機類和我方飛機類,可以發現,我方飛機精靈直接嵌入在飛機層中,并通過setTag()設置標識,可以通過標識來調用,也可以通過調用飛機層的實例instancePlane來間接調用。而敵機雖然也設置了標識,但是可以通過getSprite()函數來獲取精靈實體。 接下來實現添加子彈的功能 ~~~ bool Bullet::init() { if (!Layer::init()) { return false; } BeginBulletShoot(); return true; } void Bullet::bindEnemyManager(EnemyManager* enemyManager) { this->m_enemyManager = enemyManager; m_enemyManager->retain(); } void Bullet::BeginBulletShoot(float dt) { this->schedule(schedule_selector(Bullet::addBullet), 0.2f, kRepeatForever, dt); this->schedule(schedule_selector(Bullet::addEnemyBullet), 1.0f, kRepeatForever, dt); } void Bullet::StopBulletShoot() { this->unschedule(schedule_selector(Bullet::addBullet)); this->unschedule(schedule_selector(Bullet::addEnemyBullet)); } void Bullet::addBullet(float dt) { // 子彈 auto bullet = Sprite::createWithSpriteFrameName("bullet1.png"); if (NULL == bullet) { return; } this->addChild(bullet); // 加到Layer中去 vecBullet.pushBack(bullet); // 加到容器中去,用于以后的碰撞檢測等 // 獲得飛機的位置 Point planePos = MyPlane::instancePlane->getChildByTag(AIRPLANE)->getPosition(); Point bulletPos = Point(planePos.x, planePos.y + MyPlane::instancePlane->getChildByTag(AIRPLANE)->getContentSize().height / 2); bullet->setPosition(bulletPos); // 飛行長度 飛行就是超出窗體 float flyLen = Director::getInstance()->getWinSize().height + bullet->getContentSize().height / 2 - bulletPos.y; float flyVelocity = 320 / 1; //飛行速度 float realFlyDuration = flyLen / flyVelocity; // 飛行時間 auto actionMove = MoveTo::create(realFlyDuration, Point(bulletPos.x, Director::getInstance()->getWinSize().height + bullet->getContentSize().height / 2)); auto actionDone = CallFuncN::create(CC_CALLBACK_1(Bullet::removeBullet, this)); Sequence* sequence = Sequence::create(actionMove, actionDone, NULL); bullet->runAction(sequence); if (CocosDenshion::SimpleAudioEngine::getInstance()->isBackgroundMusicPlaying()) { CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("sound/bullet.wav"); } } void Bullet::removeBullet(Node* pNode) { if (NULL == pNode) { return; } Sprite* bullet = (Sprite*)pNode; this->removeChild(bullet, true); vecBullet.eraseObject(bullet); } // 添加敵機子彈 void Bullet::addEnemyBullet(float dt) { for (auto& eEnemy : m_enemyManager->vecEnemy) { Enemy* pEnemySprite = (Enemy*)eEnemy; // 子彈 auto bullet = Sprite::createWithSpriteFrameName("enemyBullet.png"); if (NULL == bullet) { return; } this->addChild(bullet); // 加到Layer中去 vecEnemyBullet.pushBack(bullet); // 加到容器中去,用于以后的碰撞檢測等 // 獲得敵方飛機的位置 Point enemyPos = pEnemySprite->getPosition(); Point bulletPos = Point(enemyPos.x, enemyPos.y - pEnemySprite->getContentSize().height / 2); bullet->setPosition(bulletPos); // 飛行長度 飛行就是超出窗體 float flyLen = bulletPos.y - bullet->getContentSize().height / 2; float flyVelocity = 320 / 1; //飛行速度 float realFlyDuration = flyLen / flyVelocity; // 飛行時間 auto actionMove = MoveTo::create(realFlyDuration, Point(bulletPos.x, Director::getInstance()->getVisibleOrigin().y - bullet->getContentSize().height / 2)); auto actionDone = CallFuncN::create(CC_CALLBACK_1(Bullet::removeEnemyBullet, this)); Sequence* sequence = Sequence::create(actionMove, actionDone, NULL); bullet->runAction(sequence); if (CocosDenshion::SimpleAudioEngine::getInstance()->isBackgroundMusicPlaying()) { CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("sound/enemyBullet.wav"); } } } // 移除敵機子彈 void Bullet::removeEnemyBullet(Node* pNode) { if (NULL == pNode) { return; } Sprite* bullet = (Sprite*)pNode; this->removeChild(bullet, true); vecEnemyBullet.eraseObject(bullet); } ~~~ 注意不要將添加我方飛機子彈和添加敵機子彈放在一個函數中,那樣不僅使代碼混亂,而且不利于擴展。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看