转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/26942311

源代码地址:http://download.csdn.net/detail/oyangyufu/7409593

Ccp文件介绍:

GameMenuScene.cpp游戏主菜单

GameMainScene.cpp游戏主页面

GameObjHero.cpp主角

GameHeroBullet.cpp主角的子弹

GameObjEnemy.cpp敌人

GameEnemyBullet.cpp敌人的子弹

GameAboutScene.cpp关于页面

GameMark.cpp游戏分数

执行游戏进入游戏主菜单页面

代码:

GameMenuScene类init()函数,初始化主菜单页面背景图

    CCSprite* back = CCSprite::create("bg.png");back->setScale(0.5);back->setPosition(ccp(size.width/2,size.height/2));this->addChild(back,0,0);

初始化主菜单页面背景星球图片

  CCSprite* bgstar = CCSprite::create("moon.png");bgstar->setAnchorPoint(ccp(0.5,0));bgstar->setScale(0.5);bgstar->setPosition(ccp(size.width/3 * 2, 0));this->addChild(bgstar,1,1);

初始化主菜单页面标题名称meowstar、battle

    CCNode* title = CCNode::create();title->setContentSize(CCSizeMake(0,0));CCSprite* ptmLabel = CCSprite::create("meowstar.png");ptmLabel->setScale(0.5);ptmLabel->setPosition(ccp(0,30));title->addChild(ptmLabel);CCSprite *ptbLabel = CCSprite::create("battle.png");ptbLabel->setScale(0.5);ptbLabel->setPosition( ccp(0,-30) );title->addChild(ptbLabel);title->setPosition(ccp(size.width / 2, size.height - 80));this->addChild(title,2,2);

初始化主菜单页面中的菜单项及单击事件,并设置为不可见

 CCMenuItemImage *newGameItem = CCMenuItemImage::create("newgameA.png", "newgameB.png",this,menu_selector(GameMenuScene::menuNewGameCallback));//newgame菜单项newGameItem->setScale(0.5);newGameItem->setPosition(ccp(size.width / 2,size.height / 2 - 20));newGameItem->setEnabled(false);CCMenuItemImage *continueItem = CCMenuItemImage::create("continueA.png", "continueB.png",this,menu_selector(GameMenuScene::menuContinueCallback));//continue菜单项continueItem->setScale(0.5);continueItem->setPosition(ccp(size.width / 2,size.height / 2 - 80));continueItem->setEnabled(false);CCMenuItemImage *aboutItem = CCMenuItemImage::create("aboutA.png", "aboutB.png",this,menu_selector(GameMenuScene::menuAboutCallback));//aboutA菜单项aboutItem->setScale(0.5);aboutItem->setPosition(ccp(size.width / 2,size.height / 2 - 140));aboutItem->setEnabled(false);m_soundItem = CCMenuItemImage::create("sound-on-A.png", "sound-on-B.png",this,menu_selector(GameMenuScene::menuSoundCallback));//设置声音菜单项m_soundItem->setScale(0.5);m_soundItem->setEnabled(false);m_soundItem->setPosition(ccp(40,40));CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(GameMenuScene::menuCloseCallback));pCloseItem->setPosition(ccp(size.width - 20, 20));//使用button创建菜单CCMenu* mainmenu = CCMenu::create(newGameItem,continueItem,aboutItem,m_soundItem,pCloseItem,NULL);mainmenu->setPosition(ccp(0,0));this->addChild(mainmenu,1,3);

初始化背景音乐

  m_isSound = true;//是否开启声音标识CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic( CCFileUtils::sharedFileUtils()->fullPathForFilename("background.mp3").c_str() );CocosDenshion::SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(CCFileUtils::sharedFileUtils()->fullPathForFilename("background.mp3").c_str(), true);

进入主菜单页面有动画效果

void GameMenuScene::onEnter()
{CCLayer::onEnter();CCSize size = CCDirector::sharedDirector()->getWinSize();CCNode* mainmenu = this->getChildByTag(3);//主菜单mainmenu->setPositionX(-200);mainmenu->runAction(CCSequence::create(CCEaseElasticOut::create(CCMoveTo::create(1,ccp(0,0))),CCCallFuncN::create(this, callfuncN_selector(GameMenuScene::menuEnter)),NULL));//终点有弹力CCNode* title = this->getChildByTag(2);//标题title->setPositionY(size.height + 20);title->runAction(CCEaseElasticOut::create(CCMoveBy::create(1,ccp(0,-100))));CCNode* bgstar = this->getChildByTag(1);//星球bgstar->setPositionX(size.width/3);bgstar->runAction(CCMoveBy::create(0.5,ccp(size.width/3,0)));
}
void GameMenuScene::menuEnter( CCNode* pSender )
{//菜单项可见CCNode* mainmenu = this->getChildByTag(3);CCArray* temp = mainmenu->getChildren();for(unsigned int i = 0;i < temp->count();i ++){((CCMenuItemImage *)temp->objectAtIndex(i))->setEnabled(true);}
}

点击NEW GAME、Contunue菜单按键切换GameMainScene场景进入游戏主页面

void GameMenuScene::menuNewGameCallback( CCObject* pSender )
{CCDirector::sharedDirector()->replaceScene(GameMainScene::scene());
}void GameMenuScene::menuContinueCallback( CCObject* pSender )
{CCDirector::sharedDirector()->replaceScene(GameMainScene::scene());
}

点击About 菜单按键切换GameAboutScene场景进入关于页面

void GameMenuScene::menuAboutCallback( CCObject* pSender )
{CCDirector::sharedDirector()->replaceScene(GameAboutScene::scene());
}

点击声音菜单按键,变换按键图标,设置声音开关

void GameMenuScene::menuSoundCallback( CCObject* pSender )
{if(!m_isSound)//声音开{m_soundItem->setNormalImage(CCSprite::create("sound-on-A.png"));m_soundItem->setDisabledImage(CCSprite::create("sound-on-B.png"));CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic(CCFileUtils::sharedFileUtils()->fullPathForFilename("background.mp3").c_str(), true);m_isSound = true;}else//声音关{m_soundItem->setNormalImage(CCSprite::create("sound-off-A.png"));m_soundItem->setDisabledImage(CCSprite::create("sound-off-B.png"));CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();m_isSound = false;}
}

关于页面

代码:

初始化关于页面

背景

    CCSprite* bg = CCSprite::create("bg.png");bg->setScale(0.5);bg->setPosition( ccp(size.width/2, size.height/2) );this->addChild(bg, 0,0);

星球

 CCSprite*bgstar = CCSprite::create("moon.png");bgstar->setAnchorPoint(ccp(0.5,0));bgstar->setScale(0.5);bgstar->setPosition(ccp(size.width/3 * 1, 0));this->addChild(bgstar,1,1);

关于页面的信息

    CCSprite*kuang = CCSprite::create("tb.png");kuang->setScale(0.5);kuang->setPosition(ccp(size.width/2, size.height/2));this->addChild(kuang,2,2);char inf[256];sprintf(inf,"游戏名称:喵星战争\n\n作者:\n\n公司:\n\n使用工具:cocos2D-x");CCLabelTTF * myjineng = CCLabelTTF::create(inf,"Marker Felt",40,CCSizeMake(400,400),kCCTextAlignmentLeft);myjineng->setAnchorPoint(ccp(0,1));myjineng->setColor(ccc3(255,200,0));myjineng->setPosition(ccp(50,600));kuang->addChild(myjineng);//将标签增加关于框

返回菜单按键,并注冊点击事件

   CCMenuItemImage *back = CCMenuItemImage::create("backA.png", "backB.png",this,menu_selector(GameAboutScene::menuBackCallback));back->setScale(0.5);back->setPosition(ccp(size.width - 20,size.height - 20));back->setEnabled(false);CCMenu* mainmenu = CCMenu::create(back,NULL);mainmenu->setPosition(ccp(0,0));this->addChild(mainmenu,3,4);

返回键点击返回到主菜单页面

void GameAboutScene::menuBackCallback( CCObject* pSender )
{CCDirector::sharedDirector()->replaceScene(GameMenuScene::scene());
}

进入关于页面时的动画

void GameAboutScene::onEnter()
{CCLayer::onEnter();//菜单进入后,菜单项点击有效CCSize size = CCDirector::sharedDirector()->getWinSize();CCNode* mainmenu = this->getChildByTag(4);//返回键mainmenu->setPositionX(-100);mainmenu->runAction(CCSequence::create(CCEaseElasticOut::create(CCMoveBy::create(0.5,ccp(100,0))),CCCallFuncN::create(this, callfuncN_selector(GameAboutScene::menuEnter)),NULL));//终点弹力效果//CCNode* title = this->getChildByTag(3);//关于页面标题title->setPositionY(size.height+20);title->runAction(CCEaseElasticOut::create(CCMoveBy::create(0.5,ccp(0,-40))));CCNode*bgstar = this->getChildByTag(1);bgstar->setPositionX(size.width/3 * 2);bgstar->runAction(CCMoveBy::create(0.5,ccp(-size.width/3,0)));CCNode*kuang = this->getChildByTag(2);//关于框kuang->setPositionX(-200);kuang->runAction(CCEaseElasticOut::create(CCMoveTo::create(0.5,ccp(size.width/2,size.height/2))));
}

进入主页面

代码:

初始化游戏主页面

背景,创建2个图拼接一起

  m_bg1 = CCSprite::create("bg.png");m_bg1->setScale(0.5);m_bg2 = CCSprite::create("bg.png");m_bg2->setScale(0.5);m_bg1->setAnchorPoint(ccp(0,0));//设置锚点m_bg2->setAnchorPoint(ccp(0,0));m_bg1->setPosition( ccp(0,0) );m_bg2->setPosition( ccp(0,size.height) );this->addChild(m_bg1, 0);this->addChild(m_bg2, 0);

创建主角及出场动画

    m_hero = new GameObjHero();m_hero->setPosition(ccp(size.width/2,-50));m_hero->setScale(0.5);this->addChild(m_hero,2,1);m_hero->runAction(CCMoveBy::create(0.5,ccp(0,150)));

创建3个敌人,每一个敌人有移动动作

    m_enemys = CCArray::createWithCapacity(3);for(int i = 0;i < 3;i ++){int type = i + 1;GameObjEnemy* enemy = new GameObjEnemy();enemy->setPosition(ccp(size.width/4 * type,size.height + 50));enemy->setScale(0.5);enemy->setType(type);m_enemys->addObject(enemy);this->addChild(enemy,1);enemy->moveStart();}

初始主角生命数及生命图标

  m_blood = 3;CCSpriteBatchNode* ui = CCSpriteBatchNode::create("cat.png");//CCNode *ui = CCNode::create();m_blood1 = CCSprite::createWithTexture(ui->getTexture());m_blood1->setPosition(ccp(20,size.height - 20));m_blood1->setScale(0.2f);ui->addChild(m_blood1);m_blood2 = CCSprite::createWithTexture(ui->getTexture());m_blood2->setPosition(ccp(50,size.height - 20));m_blood2->setScale(0.2f);ui->addChild(m_blood2);m_blood3 = CCSprite::createWithTexture(ui->getTexture());m_blood3->setPosition(ccp(80,size.height - 20));m_blood3->setScale(0.2f);ui->addChild(m_blood3);addChild(ui,4);

初始化主角子弹

    m_heroBullets = CCArray::createWithCapacity(5);for(size_t i = 0;i < m_heroBullets->capacity();i ++){GameHeroBullet * mybullet = new GameHeroBullet();mybullet->setIsNotVisable(this);mybullet->setScale(0.5);m_heroBullets->addObject(mybullet);this->addChild(mybullet,3);}m_heroBullets->retain();//计数器+1

初始化敌人子弹

  m_enemyBullets = CCArray::createWithCapacity(10);for(size_t i = 0;i < m_enemyBullets->capacity();i ++){GameEnemyBullet * mybullet = new GameEnemyBullet();mybullet->setIsNotVisable(this);//若是没加object參数,会发生执行时调用约定错误,原因未知mybullet->setScale(0.5);m_enemyBullets->addObject(mybullet);this->addChild(mybullet,3);}m_enemyBullets->retain();

游戏分数

    m_gameMark = new GameMark();this->addChild(m_gameMark,4);

初始化游戏结束语gameover

   m_gameOver = CCSprite::create("gameover.png");m_gameOver->setAnchorPoint(ccp(0.5,0.5));m_gameOver->setPosition(ccp(0,0));m_gameOver->setPosition(ccp(size.width/2,size.height/2 + 70));m_gameOver->setVisible(false);m_gameOver->setScale(0.5);this->addChild(m_gameOver,5);

游戏结束上一步菜单按键

  CCMenuItemImage *pCloseItem = CCMenuItemImage::create("back.png","back.png",this,menu_selector(GameMainScene::menuBackCallback) );pCloseItem->setPosition( ccp(size.width/2,size.height/2 - 50) );pCloseItem->setScale(0.5);CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);pMenu->setPosition( CCPointZero );this->addChild(pMenu,5,25);pMenu->setVisible(false);pMenu->setEnabled(false);m_isReduce = false;m_isGameOver = false;scheduleUpdate();

主角及主角子弹

代码:

主角接收触摸

    CCDirector* pDirector = CCDirector::sharedDirector();pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);

主角身体动画

  CCAnimation* animation = CCAnimation::create();animation->addSpriteFrameWithFileName("catBody1.png");animation->addSpriteFrameWithFileName("catBody2-4.png");animation->addSpriteFrameWithFileName("catBody3.png");animation->addSpriteFrameWithFileName("catBody2-4.png");animation->setDelayPerUnit(0.1f);animation->setRestoreOriginalFrame(true);mainsprite->runAction(CCRepeatForever::create(CCAnimate::create(animation)));this->addChild(mainsprite);

主角尾巴摇摆动画

 CCSprite *tail = CCSprite::create("catTail.png");tail->setAnchorPoint(ccp(0.5,1));tail->setPosition(ccp(-5,-29));tail->setScale(0.5);tail->setRotation(20);tail->runAction(CCRepeatForever::create((CCActionInterval*)CCSequence::create(CCRotateBy::create(0.5,-40),CCRotateBy::create(0.5,40),NULL)));this->addChild(tail);

主角手动画

    m_leftHand = CCSprite::create("catHand1.png");m_leftHand->setAnchorPoint(ccp(1,0.5));m_leftHand->setPosition(ccp(-18,-20));this->addChild(m_leftHand);m_rightHand = CCSprite::create("catHand2.png");m_rightHand->setPosition(ccp(18,-20));m_rightHand->setAnchorPoint(ccp(0,0.5));this->addChild(m_rightHand);m_offset = ccp(0,0);m_isControl = false;

主角定时发射子弹

schedule(schedule_selector(GameObjHero::releasebullet), 0.8f);
void GameObjHero::releasebullet( float dt )
{if(m_isControl)//是否触摸了主角,触摸了则发射子弹{CCPoint pos = this->getPosition(); //获取主角坐标GameMainScene *p = (GameMainScene*) this->getParent();//获取父场景调用releaseHeroBullet发射子弹p->releaseHeroBullet(pos.x,pos.y + 30);}
}
void GameMainScene::releaseHeroBullet( int x,int y )//參数主角坐标
{for(size_t i = 0;i < m_heroBullets->capacity();i++)//遍历主角每一个子弹{if(!((GameHeroBullet *)m_heroBullets->objectAtIndex(i))->getIsvisble()){//设置位置,并设置为显示((GameHeroBullet *)m_heroBullets->objectAtIndex(i))->setPosition(ccp(x,y));//子弹起始位置((GameHeroBullet *)m_heroBullets->objectAtIndex(i))->setIsVisable();//子弹移动动画break; }}
}
void GameHeroBullet::setIsVisable()
{this->setVisible(true);m_isVisable = true;int a = (-this->getPosition().y + 550)/150;this->runAction(CCSequence::create(CCMoveTo::create((-this->getPosition().y + 550)/150,ccp(this->getPosition().x,550)),CCCallFuncN::create(this, callfuncN_selector(GameHeroBullet::setIsNotVisable)),NULL));;
}
void GameHeroBullet::setIsNotVisable(CCNode* pSender)
{this->setVisible(false);m_isVisable = false;this->stopAllActions();
}

ccTouchBegan中推断是否点中主角

  if(! containsTouchLocation(touch))//没选中主角{return false; }else//选中了{m_isControl = true;//发射子弹//获取触摸偏移CCPoint touchPoint = touch->getLocationInView();touchPoint = CCDirector::sharedDirector()->convertToGL(touchPoint);m_offset.x = touchPoint.x - this->getPosition().x;m_offset.y = touchPoint.y - this->getPosition().y;}//选中的点是否在精灵矩形范围内   bool GameObjHero::containsTouchLocation(CCTouch* touch){return rect().containsPoint(convertTouchToNodeSpaceAR(touch));//}CCRect GameObjHero::rect(){CCSize s = CCSizeMake(85,90);CCPoint p = ccp(-s.width / 2, -s.height / 2);return CCRectMake(-s.width / 2, -s.height / 2, s.width, s.height);}

敌人及敌人子弹

代码:

创建敌人

this->setContentSize(CCSizeMake(99,115));m_mainBody = CCSprite::create("DrDog1.png");//敌人自身动画CCAnimation* animation = CCAnimation::create();animation->addSpriteFrameWithFileName("DrDog1.png");animation->addSpriteFrameWithFileName("DrDog2.png");animation->setDelayPerUnit(0.1f);animation->setRestoreOriginalFrame(true);m_mainBody->runAction(CCRepeatForever::create(CCAnimate::create(animation)));this->addChild(m_mainBody);//初始化爆炸,不可见m_boom = CCSprite::create("boom1.png");this->addChild(m_boom);m_boom->setVisible(false);m_isLife = true;

敌人移动动画

  int type = CCRANDOM_0_1() * 4;//4种随机移动//敌人运动轨迹(贝尔曲线)ccBezierConfig bezier2;bezier2.controlPoint_1 = CCPointMake(this->getPosition().x - 400,330);bezier2.controlPoint_2 = CCPointMake(this->getPosition().x + 400,280);bezier2.endPosition = CCPointMake(this->getPosition().x,-70);CCBezierTo * bezierBy2 = CCBezierTo::create(6, bezier2);ccBezierConfig bezier1;bezier1.controlPoint_1 = CCPointMake(this->getPosition().x + 400,330);bezier1.controlPoint_2 = CCPointMake(this->getPosition().x - 400,280);bezier1.endPosition = CCPointMake(this->getPosition().x,-70);CCBezierTo * bezierBy1 = CCBezierTo::create(6, bezier1);switch(type){case 0:case 1:this->runAction(CCSequence::create(CCMoveBy::create(6,ccp(0,-600)),CCCallFuncN::create(this, callfuncN_selector(GameObjEnemy::reStart)),NULL));break;case 2:this->runAction(CCSequence::create(bezierBy2,CCCallFuncN::create(this, callfuncN_selector(GameObjEnemy::reStart)),NULL));break;case 3:this->runAction(CCSequence::create(bezierBy1,CCCallFuncN::create(this, callfuncN_selector(GameObjEnemy::reStart)),NULL));break;}schedule(schedule_selector(GameObjEnemy::releaseBullet), 1.2f);

当第一波敌人过屏以后,又一次设置一波敌人初始位置及移动的动画, 这样敌人就无限循环出现

void GameObjEnemy::reStart( CCNode* pSender )
{m_mainBody->setVisible(true);m_boom->setVisible(false);CCSize size = CCDirector::sharedDirector()->getWinSize();this->setPosition(ccp(size.width/4 * m_type,size.height + 50));m_isLife = true;this->moveStart();
}

每一个敌人发射子弹

void GameObjEnemy::releaseBullet( float dt )
{CCSize size = CCDirector::sharedDirector()->getWinSize();CCPoint pos = this->getPosition();//敌人位置if(pos.y > 20 && pos.y < size.height && m_isLife)//敌人出在屏幕上才干发{GameMainScene *p = (GameMainScene *) this->getParent();p->releaseEnemyBullet(pos.x,pos.y - 30);//发射子弹}
}
void GameMainScene::releaseEnemyBullet( int x,int y )
{for(unsigned int i = 0; i<m_enemyBullets->capacity(); i++)//每一个敌人的子弹10发{if(!((GameEnemyBullet*)m_enemyBullets->objectAtIndex(i))->getIsvisble()){((GameEnemyBullet*)m_enemyBullets->objectAtIndex(i))->setPosition(ccp(x,y));((GameEnemyBullet*)m_enemyBullets->objectAtIndex(i))->setIsVisable();//子弹动画break; }}
}
void GameEnemyBullet::setIsVisable()
{this->setVisible(true);m_isVisable = true;this->runAction(CCRepeatForever::create(CCRotateBy::create(1,360)));this->runAction(CCSequence::create(CCMoveTo::create((this->getPosition().y + 50)/150,ccp(this->getPosition().x,-50)),CCCallFuncN::create(this, callfuncN_selector(GameEnemyBullet::setIsNotVisable)),NULL));;
}void GameEnemyBullet::setIsNotVisable(CCNode* pSender)
{this->setVisible(false);m_isVisable = false;this->stopAllActions();
}

游戏主页面update定时器进行游戏背景动画处理和主角与敌人攻击碰撞检測

游戏背景动画至上往下移动,当第1张图滑过底部时,第2张图连接上,每次移动2

游戏背景动画至上往下移动,当第1张图滑过底部时,第2张图连接上,每次移动2m_bg1->setPosition(ccp(m_bg1->getPosition().x,m_bg1->getPosition().y - 2));m_bg2->setPosition(ccp(m_bg2->getPosition().x,m_bg2->getPosition().y - 2));if(m_bg2->getPosition().y <= 0){float temp = m_bg2->getPosition().y + 480;m_bg1->setPosition(ccp(m_bg2->getPosition().x,temp));}if(m_bg1->getPosition().y <= 0){float temp = m_bg1->getPosition().y + 480;m_bg2->setPosition(ccp(m_bg1->getPosition().x,temp));}

三种碰撞检測
敌人和主角、主角子弹碰撞检測

CCPoint hpos = m_hero->getPosition();//主角坐标for(size_t i = 0;i < m_enemys->capacity();i ++)//遍历敌人{GameObjEnemy * enemy = ((GameObjEnemy *) m_enemys->objectAtIndex(i));//单个敌人CCPoint epos = enemy->getPosition();if(enemy->m_isLife)//子弹击中敌人{for(size_t i = 0;i < m_heroBullets->capacity();i ++)//主角子弹{if(((GameHeroBullet *)m_heroBullets->objectAtIndex(i))->getIsvisble()){if(isHit(((GameHeroBullet *)m_heroBullets->objectAtIndex(i))->getPosition(),epos,5,13,21,28))//主角子弹打中敌人碰撞检測{enemy->setDie();//敌人消失,有爆炸动画m_gameMark->addNumber(200);//加分break;}}}}//敌人和主角碰撞if(!m_isReduce && enemy->m_isLife && isHit(hpos,epos,21,22.5,21,28)){enemy->setDie();setHeroHurt();//主角掉命}}

主角被敌人子弹打中碰撞检測

 if(!m_isReduce){for(size_t i = 0;i < m_enemyBullets->capacity();i ++)//敌人的子弹10发{if(isHit(hpos,((GameEnemyBullet *)m_enemyBullets->objectAtIndex(i))->getPosition(),21,22.5,5,13)){setHeroHurt();//主角掉命}}}

推断两个矩形是否碰撞

bool GameMainScene::isHit( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 )
{if(abs(p1.x - p2.x) < w1 + w2 && abs(p1.y - p2.y) < h1 + h2){return true;}return false;
}

主角掉命

void GameMainScene::setHeroHurt()
{m_hero->stopAllActions();switch(m_blood)//初始3{case 3:m_blood1->setVisible(false);//命图标不可见m_blood --;break;case 2:m_blood2->setVisible(false);m_blood --;break;case 1:m_blood3->setVisible(false);m_blood --;break;case 0:if(! m_isGameOver){m_isGameOver = true;setGameOver();//3条命用完,游戏结束}break;}CCActionInterval*  action = CCBlink::create(5, 10);//3秒内闪烁6次m_hero->runAction(action);scheduleOnce(schedule_selector(GameMainScene::resetReduce), 5.0f);//5秒后运行一次m_isReduce = true;//5秒不受伤害
}
void GameMainScene::resetReduce( float dt )
{m_isReduce = false;//又一次能收到伤害
}

敌人消失后爆炸

void GameObjEnemy::setDie()
{//敌人消失m_isLife = false;m_mainBody->setVisible(false);m_boom->setVisible(true);this->stopAllActions();//爆炸动画CCAnimation* boomAnimation = CCAnimation::create();boomAnimation->addSpriteFrameWithFileName("boom1.png");boomAnimation->addSpriteFrameWithFileName("boom2.png");boomAnimation->addSpriteFrameWithFileName("boom3.png");boomAnimation->addSpriteFrameWithFileName("boom4.png");boomAnimation->addSpriteFrameWithFileName("boom5.png");boomAnimation->setDelayPerUnit(0.1f);boomAnimation->setRestoreOriginalFrame(true);m_boom->runAction(CCSequence::create(CCAnimate::create(boomAnimation),CCCallFuncN::create(this, callfuncN_selector(GameObjEnemy::reStart)),NULL));
}

转载于:https://www.cnblogs.com/mfrbuaa/p/3813729.html

竖屏小游戏--喵星战争源代码分析【完整】相关推荐

  1. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  2. c++编写手机小游戏代码_玩过自己开发的贪吃蛇吗?点这里,教你用Python写一个贪吃蛇小游戏!(附源代码)...

    后台回复'0816',加入Python交流群~ 往日回顾:Python必读好书,这9本份量十足~ 本文代码的实现效果,获取源代码,请直接滑到文末~都说Python除了生孩子,什么都能干.咱们今天,就用 ...

  3. android 竖屏rpg游戏,可以竖屏玩的rpg角色扮演大型手游排行

    游戏是目前绝大多数人放松的渠道,但是大部分人群是需要上班的,双休日休息还来不及玩什么游戏呢,但是我有办法解决这种问题,那就是找到竖屏游戏,可以单手操作的那种,就算在车上一手拉着扶手,另一只手也可以玩游 ...

  4. 联机斗地主小游戏(Java) 源代码及软件开发过程

    软件工程一课中,我们开发斗地主小游戏,能够实现联机,以下为我们的源代码和开发过程 https://github.com/Zongziyu/Software-course PS:持续更新中

  5. 3d游戏编程大师技巧 源代码_C/C++编程入门基础系列:俄罗斯方块小游戏制作,直接源代码分享...

    这篇文章主要为大家详细介绍了C语言实现俄罗斯方块小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.要先下载一个 graphics.h 的头文件来绘图. 2.初始化窗口:initgraph( ...

  6. python小游戏_课程设计_期末大作业——小游戏合集(含源代码)

    设计小游戏盒子 本文代码链接 点击直接下载 https://download.csdn.net/download/Wps1919/87103302?spm=1001.2014.3001.5501 如将 ...

  7. JAVA小游戏之扫雷的源代码

    老师讲的扫雷小游戏,因为基础还不扎实,所以还写不出扫雷游戏,大家可以看看尝试去写写. ------------------------------------ //测试类 package com.ti ...

  8. 微信小游戏实战——飞机大战demo笔记完整篇(函数实现)

    1. 目录结构: 2. game.js:入口文件 //game.js文件完整代码: import Main from "./src/mian.js" new Main() 3. g ...

  9. unity 打砖块—休闲小游戏,摸鱼必备(完整代码)

    打砖块小游戏通常会被当做Unity学习的第一个案例,下面给大家介绍如何实现打砖块案例的 建立cube,大体这个样子,可以建造自己喜欢的形状和颜色. 给正方形的cube添加刚体 将摄像机的位置对准创建的 ...

  10. 前端案例:像素鸟小游戏(js+dom操作,完整代码,附案例素材)

    目录 一.案例效果 二.实现思路 三.完整代码+详细注释 四.案例素材 一.案例效果 二.实现思路 创建游戏背景板和小鸟,并分别设置相对定位与绝对定位: 初始化背景图的位置: 初始化小鸟的位置: 设置 ...

最新文章

  1. RDKit | 基于RDKit获取分子3D距离矩阵
  2. spring mvc异常统一处理(ControllerAdvice注解)
  3. AgileEAS.NET平台开发实例-开发环境配置
  4. 安全 - 堡垒机 - Jumpserver
  5. 【MySQL】错误#1217:外键约束引起的错误
  6. string相关库函数
  7. 腾讯视频app下载2019_腾讯视频主设备如何设置
  8. 秦汉考场科目三路线图_海淀驾校科目三校内考场总结
  9. 彻底理解 Android 中的阴影 1
  10. Socket简单介绍(通过NSStream)
  11. [转载]要死的人都后悔些什么
  12. 在linux中安装搜狗输入法,如何在ubuntu下安装搜狗输入法
  13. 微信,你的野心到底有多大?
  14. matlab-基础 plot linewidth 设置图像的线粗细
  15. 1vrms等于多少伏
  16. 手机操作系统开源软件
  17. CNS级别的高级气泡图——R语言简单实现
  18. 不敲代码用ChatGPT开发一个App
  19. autocad.net
  20. 浅析国内数字藏品发展趋势

热门文章

  1. 情人节,给你们发点福利。
  2. PAT乙级真题 | 1006 换个格式输出整数
  3. javascript入门之算术乘法表
  4. 《Act with Prudence》读后感
  5. Linux入门:PuTTY实现Linux和Windows文件互传
  6. Node.js CVE-2017-14849复现(详细步骤)
  7. Python--JavaScript的对象
  8. Oracle Concepts Guide 中 Oracle 实例 和 数据库 【关系图】
  9. http学习笔记(四)——HTTP报文
  10. Python 的一些网络库(感谢Arbow)