这个简单的捕鱼游戏Demo只是完成了简单的:
1.场景切换、数据加载、武器等级更换<大炮的升级>、
2.鱼的随机游动、大炮发射子弹、撒网、捕鱼
3.子弹、鱼、网的碰撞检测等;
4.场景及背景音乐的定时更换,碰撞时得音效;
仅供参考、入门练习用例;
第一部分:Cocos2d-x简单游戏<捕鱼达人>代码实现|第一部分:鱼类
第二部分:Cocos2d-x简单游戏<捕鱼达人>代码实现|第二部分:子弹、渔网、大炮类
第三部分:Cocos2d-x简单游戏<捕鱼达人>代码实现|第三部分:菜单类
第四部分:Cocos2d-x简单游戏<捕鱼达人>代码实现|第四部分:加载场景类
第五部分:Cocos2d-x简单游戏<捕鱼达人>代码实现|第五部分:游戏类
#ifndef __shows__GameScene__
#define __shows__GameScene__
#include <iostream>
#include "Header.h"
#include "Fish.h"
#include "Bullet.h"
#include "Net.h"
#include "Weapon.h"
#include "SimpleAudioEngine.h"
#include "CCRectContaint.h"
using namespace CocosDenshion;
class GameScene:publicCCLayer,CCStandardTouchDelegate{
private:
void loadTexture();//加载缓存
void initGameScene();//初始化场景
void addFish();//添加鱼
void updateFish();//更换场景的鱼
void updateHit();//更新
void stopOrPlay();//暂停或开始
void changeBackground();//改变场景
void removeNet(CCSprite *sender);//移除渔网
void updateEnergy(int addEnergy);//更新
void setAngle(CCPoint point,CCSprite *sprite);//设置大炮旋转角度
/********************/
void playBoundingEffectsMusic();
void play();
void pause();
void scoreShow();
void addWeaponLevel();
void reduceWeaponLevel();
void gobackMainUI();
void afterShowGoldens(CCSprite *sender);
void afterShowMoney(CCSprite *pSprite);
void afterCatch(CCSprite *pSprite);
void afterShowNet(CCSprite *pSprite);
void removeBullet(CCSprite *sprite);
void removeWeapon(CCSprite *pSprite);
public:
CCSpriteBatchNode *fishSheet;//鱼
CCSpriteBatchNode *bulletSheet;//子弹
CCSpriteBatchNode *netSheet;//渔网
CCSpriteBatchNode *cannonSheet;//大炮
CCSpriteBatchNode *goldItemSheet;//金币
char currentMusicString[50];
int weaponLevel;
int energy;
int maxEnergy;
CCSprite *energyPointer;
Weapon *weapon;
CCArray *allFishArray;
public:
GameScene();
~GameScene();
virtual bool init();
CREATE_FUNC(GameScene);
static CCScene *scene();
void ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent);
void ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent);
void ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent);
};
#endif /* defined(__shows__GameScene__) */
#include "GameScene.h"
constint MAX_NUMBER_FISH = 60;//场内最多鱼的数量
constfloat weapon_scale=1.5f;
constfloat maxEnergyRotation=150;
constfloat minEnergyRotation=30;
const CCSize allSize =WINSIZE_BYDIRECT;
GameScene::GameScene(){
}
CCScene * GameScene::scene(){
CCScene *scene;
do {
scene =CCScene::create();
CC_BREAK_IF(!scene);
GameScene *layer = GameScene::create();
CC_BREAK_IF(!layer);
scene->addChild(layer);
}while (0);
return scene;
}
#pragma mark-
#pragma mark--//初始化层
boolGameScene::init(){
if (!CCLayer::init()) {
return false;
}
this->setTouchEnabled(true);
maxEnergy=1000;
this->loadTexture();
this->initGameScene();
this->schedule(schedule_selector(GameScene::updateFish),0.5f);
this->schedule(schedule_selector(GameScene::updateHit),0.1f);
this->schedule(schedule_selector(GameScene::changeBackground),18.0f);
this->stopOrPlay();
return true;
}
#pragma mark-
#pragma mark--//初始化场景
voidGameScene::initGameScene(){
CCSize winSize = WINSIZE_BYDIRECT;
CCSprite *bgSprite = CCSprite::create("bj00.jpg");
bgSprite->setScale(2.0f);
bgSprite->setScaleX(2.5f);
bgSprite->setPosition(ccp(winSize.width/2, winSize.height/2));
this->addChild(bgSprite,0);
//大炮
char tempCanon[50];
sprintf(tempCanon,"actor_cannon1_%i1.png",1);
weapon = (Weapon *)CCSprite::createWithSpriteFrameName(tempCanon);
weapon->weaponLevel =1;
weaponLevel = 1;//本类
weapon->setScale(weapon_scale);
weapon->setPosition(ccp(winSize.width/2,75));
weapon->weaponType =normal;
this->addChild(weapon,102);
CCSprite *energyBox = CCSprite::create("ui_2p_004.png");
energyBox->setScale(2.0f);
energyBox->setPosition(CCPoint(ccp(winSize.width/2,10)));
this->addChild(energyBox,99);
energyPointer =CCSprite::create("ui_2p_005.png");
energyPointer->setScale(2.0f);
energyPointer->setPosition(CCPoint(ccp(winSize.width/2,10)));
this->addChild(energyPointer,90);
//添加顶部框体
CCSprite *backGroundExp = CCSprite::create("ui_box_01.png");
backGroundExp->setScale(1.5f);
backGroundExp->setPosition(ccp(winSize.width/2,winSize.height));
backGroundExp->setAnchorPoint(ccp(0.5f,1.0f));
this->addChild(backGroundExp,101);
//底部框体
CCSprite *backGroundBottom = CCSprite::create("ui_box_02.png");
backGroundBottom->setScale(1.5f);
backGroundBottom->setScaleX(2.5f);
backGroundBottom->setScaleY(2);
backGroundBottom->setPosition(ccp(winSize.width/2 -90,0));
backGroundBottom->setAnchorPoint(ccp(0.5f,0));
this->addChild(backGroundBottom,101);
CCMenuItemFont *addItem =CCMenuItemFont::create("+",this, menu_selector(GameScene::addWeaponLevel));
addItem->setFontSize(72.0f);
addItem->setScale(1.5f);
addItem->setFontName("Arial");
CCMenu *addMenu = CCMenu::create(addItem,NULL);
addMenu->setPosition(ccp(winSize.width/2+75,10));
addMenu->alignItemsVertically();
this->addChild(addMenu,202);
CCMenuItemFont *reduceItem =CCMenuItemFont::create("-",this, menu_selector(GameScene::reduceWeaponLevel));
reduceItem->setFontSize(72.0f);
reduceItem->setScale(1.5f);
reduceItem->setFontName("Arial");
CCMenu *reduceMenu = CCMenu::create(reduceItem,NULL);
reduceMenu->setPosition(ccp(winSize.width/2-70,30));
reduceMenu->alignItemsVertically();
this->addChild(reduceMenu,202);
}
#pragma mark-
#pragma mark--//加载缓存图片
voidGameScene::loadTexture(){
//加载大炮
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("cannon.plist");
cannonSheet = CCSpriteBatchNode::create("cannon.png");
this->addChild(cannonSheet,102);
//加载鱼
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("fish.plist");
fishSheet = CCSpriteBatchNode::create("fish.png");
this->addChild(fishSheet,12);
//加载子弹
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("bullet.plist");
bulletSheet = CCSpriteBatchNode::create("bullet.png");
this->addChild(bulletSheet,13);
//加载网
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("net.plist");
netSheet = CCSpriteBatchNode::create("net.png");
this->addChild(netSheet,14);
//加载金币
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("8goldItem.plist");
goldItemSheet =CCSpriteBatchNode::create("8goldItem.png");
this->addChild(goldItemSheet,15);
}
#pragma mark--子弹发射碰撞是的音效
voidGameScene::playBoundingEffectsMusic(){
SimpleAudioEngine::sharedEngine()->playEffect("bg_music03.caf");
SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5f);
}
#pragma mark-
#pragma mark--//向场景中添加鱼
voidGameScene::addFish(){
int number = 10;
int type = rand()%11+1;
CCArray *oneFish = CCArray::create();
char temp[100];
for(int i=1;i<number;i++){
sprintf(temp,"fish0%i_0%i.png",type,i);
CCSpriteFrame *spriteFrame =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(temp);
CCAnimationFrame *animateFrame =new CCAnimationFrame();
animateFrame->autorelease();
animateFrame->initWithSpriteFrame(spriteFrame,1,NULL);
oneFish->addObject(animateFrame);
}
CCAnimation *animation = CCAnimation::create(oneFish, 0.1f);
CCAnimate *animate = CCAnimate::create(animation);
CCRepeatForever *fishAction = CCRepeatForever::create(animate);
char tempFish[100];
sprintf(tempFish,"fish0%i_0%i.png",type,1);
Fish *fishs = (Fish *)Fish::createWithSpriteFrameName(tempFish);
fishs->setScale(1.0f);
fishs->fishLevel = type;
fishs->isCatched =false;
fishs->runAction(fishAction);
fishs->addPath();
fishs->run();
fishSheet->addChild(fishs);
}
#pragma mark-
#pragma mark--//不断更新场景中的鱼
voidGameScene::updateFish(){
if(fishSheet->getChildren()->count()<MAX_NUMBER_FISH){
this->addFish();
}
}
#pragma mark-
#pragma mark--//更新碰撞
voidGameScene::updateHit(){
CCSize winSize = WINSIZE_BYDIRECT;
Fish *fish;
Bullet *bullet;
Net *net;
CCScaleTo *scale0 = CCScaleTo::create(0.3f,3.0f);
CCScaleTo *scale1 = CCScaleTo::create(0.3f,0.8f);
CCObject *bulletObject = NULL;
//遍历子弹
CCARRAY_FOREACH(bulletSheet->getChildren(),bulletObject){
bullet = (Bullet *)bulletObject;
if(bullet->isHit){
continue;
}
if(bullet->getPosition().x>(winSize.width+bullet->getContentSize().width)||
bullet->getPosition().x<(-bullet->getContentSize().width)){
continue;
}
CCObject *fishObject = NULL;
/*******************检测鱼和子弹碰撞**************************/
CCARRAY_FOREACH(fishSheet->getChildren(),fishObject){
fish = (Fish *)fishObject;
if(bullet->isHit){
continue;
}
if (fish->boundingBox().intersectsRect(bullet->boundingBox())) {
this->playBoundingEffectsMusic();//播放音效
bullet->isHit =true;
char temp[100];
sprintf(temp,"net0%i.png",weaponLevel);
Net *net = (Net *)Net::createWithSpriteFrameName(temp);
net->setPosition(bullet->getPosition());
CCMoveTo *moveTo = CCMoveTo::create(0.03f,ccp(bullet->getPosition().x-10,bullet->getPosition().y+40));
bulletSheet->removeChild(bullet,true);//移除子弹
netSheet->addChild(net);
CCCallFuncO *scaleNetAfterShow = CCCallFuncO::create(this,callfuncO_selector(GameScene::afterShowNet), net);
CCSequence *netSequence = CCSequence::create(moveTo,scale0,scale1,scale0,scale1,scaleNetAfterShow,NULL);
net->runAction(netSequence);
}
}
}
/***************************检测渔网和鱼碰撞***************************/
CCObject *netObject = NULL;
CCARRAY_FOREACH(netSheet->getChildren(),netObject){
net = (Net *)netObject;
if(net->isHit){
continue;
}
CCObject *fishObject1 = NULL;
CCARRAY_FOREACH(fishSheet->getChildren(), fishObject1){
fish = (Fish *)fishObject1;
if(fish->isCatched){
continue;
}
if (net->boundingBox().intersectsRect(fish->boundingBox())) {
if(!(fish->randomCatch(weaponLevel))){
continue;
}else{
fish->isCatched =true;
this->updateEnergy(fish->fishLevel);
CCArray *fishes = CCArray::create();
int number;
if(fish->fishLevel <8){
number =3;
}else{
number =5;
}
for(int i=1;i<number;i++){
char temp[100];
sprintf(temp,"fish0%i_catch_0%i.png",fish->fishLevel,i);
CCSpriteFrame *spriteFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(temp);
CCAnimationFrame *animateFrame = new CCAnimationFrame();
animateFrame->autorelease();
animateFrame->initWithSpriteFrame(spriteFrame,1,NULL);
fishes->addObject(animateFrame);
}
CCAnimation *animation = CCAnimation::create(fishes,0.2f);
CCAnimate *animate = CCAnimate::create(animation);
CCActionInterval *fishCatchAction = CCRepeat::create(animate, 2);
CCCallFuncO *func0 = CCCallFuncO::create(this,callfuncO_selector(GameScene::afterCatch),fish);
CCSequence *animalSequence = CCSequence::create(fishCatchAction,func0);
fish->stopAllActions();
fish->runAction(animalSequence);
//金币
CCSprite *money = CCSprite::create("+5.png");
money->setPosition(fish->getPosition());//与鱼的位置相同
CCMoveTo *move = CCMoveTo::create(0.6,CCPointMake(120,20));
CCCallFuncO *moneyAfterShow = CCCallFuncO::create(this,callfuncO_selector(GameScene::afterShowMoney), money);
CCSequence *moneySequence = CCSequence::create(scale0,scale1,scale0,scale1,move,moneyAfterShow,NULL);
money->runAction(moneySequence);
this->addChild(money,109);
CCCallFuncO *scoreShow =CCCallFuncO::create(this,callfuncO_selector(GameScene::scoreShow),NULL);
CCActionInterval *acitonInterval = CCActionInterval::create(0.5);
CCSequence *scoreSequence = CCSequence::create(acitonInterval,scoreShow,NULL);
money->runAction(scoreSequence);
}
}
}
net->isHit =true;
}
}
#pragma mark-
#pragma mark--//暂停或开始
voidGameScene::stopOrPlay(){
CCSize winSize = WINSIZE_BYDIRECT;
CCSprite *stopSprite = CCSprite::create("pause.png");
CCSprite *playSprite = CCSprite::create("play.png");
CCMenuItemSprite *stopItem =CCMenuItemSprite::create(stopSprite,NULL,this,menu_selector(GameScene::pause));
CCMenuItemSprite *playItem =CCMenuItemSprite::create(playSprite,NULL,this,menu_selector(GameScene::play));
CCMenu *didClick = CCMenu::create(stopItem,playItem,NULL);
didClick->setScale(1.5f);
didClick->alignItemsHorizontally();
didClick->alignItemsHorizontallyWithPadding(25.0f);
didClick->setPosition(ccp(winSize.width/2+750,winSize.height/2+450));
this->addChild(didClick,203);
}
#pragma mark-
#pragma mark--//移除网
voidGameScene::removeNet(CCSprite *sender){
CCSprite *sprite = (CCSprite *)sender;
sprite->removeFromParentAndCleanup(true);
}
#pragma mark
#pragma mark--暂停
voidGameScene::pause(){
CCSize winSize = WINSIZE_BYDIRECT;
CCDirector::sharedDirector()->pause();
this->setTouchEnabled(false);
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
if (!this->getChildByTag(300)) {
CCLayerColor *showLayer = CCLayerColor::create(ccc4(0,0,0,150),winSize.width,winSize.height);
showLayer->setTag(300);
CCMenuItemFont *goOnMenuItem = CCMenuItemFont::create("继续游戏",this,menu_selector(GameScene::play));
CCMenuItemFont *goBackUIMenuItem = CCMenuItemFont::create("回主界面",this,menu_selector(GameScene::gobackMainUI));
CCMenu *menu = CCMenu::create(goOnMenuItem,goBackUIMenuItem,NULL);
menu->alignItemsVertically();
menu->alignItemsVerticallyWithPadding(18);
showLayer->addChild(menu,301);
this->addChild(showLayer,300);
}
}
#pragma mark-
#pragma mark---开始
voidGameScene::play(){
CCDirector::sharedDirector()->resume();
this->setTouchEnabled(true);
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(currentMusicString);
if (this->getChildByTag(300)) {
this->removeChildByTag(300,true);
}
}
#pragma mark-
#pragma mark--//更新
voidGameScene::updateEnergy(int addEnergy){
energy += addEnergy;
float rotate = ((float)energy/maxEnergy)*(maxEnergyRotation-minEnergyRotation)+minEnergyRotation;
energyPointer->setRotation(rotate);
}
#pragma mark-
#pragma mark-------返回主界面
voidGameScene::gobackMainUI(){
if (this->getChildByTag(300)) {
this->removeChildByTag(300,true);
}
CCDirector::sharedDirector()->replaceScene(GameScene::scene());
CCDirector::sharedDirector()->resume();
}
#pragma mark-
#pragma mark--实时更换背景
voidGameScene::changeBackground(){
int i = rand()%3;
CCSize winSize = WINSIZE_BYDIRECT;
//背景图片
char tempBgImge[50];
char tempBgMusic[50];
sprintf(tempBgImge,"bj0%i.jpg",i);
sprintf(tempBgMusic,"bg_music0%i.caf",i);
CCSprite *changeBackground = CCSprite::create(tempBgImge);
changeBackground->setScale(2.0f);
changeBackground->setScaleX(2.5f);
//更换背景音乐
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(tempBgMusic);
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.02f);
sprintf(currentMusicString,"bg_music0%i.caf",i);
changeBackground->setPosition(ccp(winSize.width /2,winSize.height/2));
if (this->getChildByTag(i)) {
this->getChildByTag(i)->removeFromParentAndCleanup(true);
}
this->setTag(i);
this->addChild(changeBackground,0);
}
#pragma mark-
#pragma mark--Touches Event
voidGameScene::ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent){
//大炮旋转
CCTouch *touch = (CCTouch *)pTouches->anyObject();
CCPoint position = touch->getLocationInView();
position =CCDirector::sharedDirector()->convertToGL(position);
if (position.y <=weapon->getPosition().y) {
return;
}
if (weapon->weaponType ==laser) {
}else{
char temp[50];
sprintf(temp,"actor_cannon1_%i2.png",weapon->weaponLevel);
weapon->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(temp));
}
this->setAngle(position,NULL);
}
voidGameScene::ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent){
CCTouch *touch = (CCTouch *) pTouches->anyObject();
CCPoint position = touch->getLocationInView();
position =CCDirector::sharedDirector()->convertToGL(position);
this->setAngle(position,NULL);
}
voidGameScene::ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent){
//要能添加子弹
CCSize size =WINSIZE_BYDIRECT;
CCTouch *touch = (CCTouch *) pTouches->anyObject();
CCPoint position = touch->getLocationInView();
position =CCDirector::sharedDirector()->convertToGL(position);
int offX=position.x-weapon->getPosition().x;
int offY=position.y-weapon->getPosition().y;
//如果是超级子弹
if(weapon->weaponType ==laser){
}else{
//子弹处理
char temp[50];
sprintf(temp,"bullet0%i.png",weapon->weaponLevel);
Bullet *bullet = (Bullet *)Bullet::createWithSpriteFrameName(temp);
bullet->setScale(2.5f);//子弹大小
bullet->setPosition(weapon->getPosition());
bullet->isHit =false;
this->setAngle(position, bullet);//设置子弹角度
int realY=size.height +weapon->getContentSize().height/2;
float ratio=(float)offX/(float)offY;
int realX=(realY-weapon->getPosition().y)*ratio+weapon->getPosition().x;
CCPoint realDest=ccp(realX,realY);
//偏移位置
int offRealX=realX-weapon->getPosition().x;
int offRealY=realY-weapon->getPosition().y;
float length=sqrtf((offRealX * offRealX) + (offRealY * offRealY));
float velocity=240/1;
float realMoveDuration=length/velocity;
CCMoveTo *moveTo = CCMoveTo::create(realMoveDuration, realDest);
CCCallFuncO *removeBullet= CCCallFuncO::create(this,callfuncO_selector(GameScene::removeBullet), bullet);
CCSequence *bulletSeque = CCSequence::create(moveTo,removeBullet,NULL);
bullet->setRotation(weapon->getRotation());
bullet->runAction(bulletSeque);
bulletSheet->addChild(bullet);
}
}
#pragma mark-
#pragma mark--//大炮旋转角度
voidGameScene::setAngle(CCPoint point,CCSprite *sprite){
int offX = point.x -weapon->getPosition().x;
int offY = point.y -weapon->getPosition().y;
if(offY <= 0){
return;
}
//求出角度--x和y的长度<以大炮位置为(0,0)点>
float ratio = (float)offY/(float)offX;
//tan值
float angle = atanf(ratio)/M_PI*180;
if(angle<0){
weapon->setRotation(-(90+angle));
if (sprite) {//子弹跟着大炮角度转
sprite->setRotation(weapon->getRotation());
}
}elseif(angle>0){
weapon->setRotation(90-angle);
if (sprite) {
sprite->setRotation(weapon->getRotation());
}
}
}
#pragma mark-
#pragma mark----显示分数
voidGameScene::scoreShow(){
// gold->setNumber(gold->getNumber()+5);
}
#pragma mark
#pragma mark----显示金币后移除
voidGameScene::afterShowGoldens(CCSprite *pSprite){
CCSprite *sprite = (CCSprite *)pSprite;
if(sprite != NULL){
sprite->removeFromParentAndCleanup(true);
}
}
#pragma mark-
#pragma mark---显示钱之后移除
voidGameScene::afterShowMoney(CCSprite *pSprite){
CCSprite *sprite = (CCSprite *)pSprite;
if(sprite != NULL){
sprite->removeFromParentAndCleanup(true);
}
}
#pragma mark-
#pragma mark-移除被捕鱼-
voidGameScene:: afterCatch(CCSprite *pSprite){
CCSprite *sprite = (CCSprite *)pSprite;
if(sprite != NULL){
fishSheet->removeChild(sprite,true);
}
}
#pragma mark-
#pragma mark-移除网-
voidGameScene::afterShowNet(CCSprite *pSprite){
CCSprite *sprite = (CCSprite *)pSprite;
if(sprite != NULL){
netSheet->removeChild(sprite,true);
}
}
#pragma mark-
#pragma mark-移除子弹-
voidGameScene::removeBullet(CCSprite *pSprite){
CCSprite *sprite = (CCSprite *)pSprite;
if(sprite){
bulletSheet->removeChild(sprite,true);
}
}
#pragma mark-
#pragma mark--//减大炮级别
voidGameScene::reduceWeaponLevel(){
CCSize winSize = WINSIZE_BYDIRECT;
weaponLevel--;
if(weaponLevel ==0){
weaponLevel = 7;
}
CCScaleTo *narrow = CCScaleTo::create(0.1f,0.03);
CCCallFuncO *removeWeapon =CCCallFuncO::create(this,callfuncO_selector(GameScene::removeWeapon),weapon);
CCSequence *bowDismissSequence = CCSequence::create(narrow,removeWeapon,NULL);
weapon->runAction(bowDismissSequence);
char temp[50];
sprintf(temp,"actor_cannon1_%i1.png",weaponLevel);
weapon = (Weapon*)CCSprite::createWithSpriteFrameName(temp);
weapon->weaponLevel =weaponLevel;
weapon->setPosition(ccp(winSize.width/2,75));
weapon->setScale(0.03f);
CCDelayTime *delayTime = CCDelayTime::create(0.1f);
CCScaleTo *appear =CCScaleTo::create(0.1f,weapon_scale);
CCSequence *bowAppearSequence = CCSequence::create(delayTime,appear,NULL);
weapon->runAction(bowAppearSequence);
cannonSheet->addChild(weapon,102);
}
#pragma mark-
#pragma mark--//添加大炮级别
voidGameScene::addWeaponLevel(){
CCSize winSize = WINSIZE_BYDIRECT;
weaponLevel++;
if(weaponLevel ==8){
weaponLevel = 1;
}
CCScaleTo *narrow = CCScaleTo::create(0.1f,0.03);
CCCallFuncO *removeWeapon =CCCallFuncO::create(this,callfuncO_selector(GameScene::removeWeapon),weapon);
CCSequence *bowDismissSequence = CCSequence::create(narrow,removeWeapon,NULL);
weapon->runAction(bowDismissSequence);
char temp[50];
sprintf(temp,"actor_cannon1_%i1.png",weaponLevel);
weapon = (Weapon *)CCSprite::createWithSpriteFrameName(temp);
weapon->weaponLevel =weaponLevel;
weapon->setScale(0.03f);
weapon->setPosition(ccp(winSize.width/2,75));
CCDelayTime *delayTime = CCDelayTime::create(0.1f);
CCScaleTo *appear =CCScaleTo::create(0.1f,weapon_scale);
CCSequence *bowAppearSequence = CCSequence::create(delayTime,appear,NULL);
weapon->runAction(bowAppearSequence);
cannonSheet->addChild(weapon,102);
}
#pragma mark-
#pragma mark-移除大炮-
voidGameScene::removeWeapon(CCSprite *pSprite){
CCSprite *sprite = (CCSprite *)pSprite;
sprite->removeFromParentAndCleanup(true);
}
GameScene::~GameScene(){
}