啥也不说了,直接上代码看吧!
GameLayer.h #pragma once #include "cocos2d.h" USING_NS_CC; class GameLayer : public CCLayer { private: void createOneFish(); void createFishTick(float dt); void turnFishBack(CCObject *sender); void movefinish(CCObject *sender); void bulletMovefinish(CCObject *sender); void scaleDone(CCObject * sender); protected: void ccTouchesEnded(CCSet * pTouch,CCEvent * pEvent); public: GameLayer(void); ~GameLayer(void); bool init(); static GameLayer* create(); static CCScene* scene(); }; GameLayer.cpp #include "GameLayer.h" #include<stdlib.h> GameLayer::GameLayer(void) { } GameLayer::~GameLayer(void) { } bool GameLayer::init() { if(!CCLayer::init()) { return false; } //打开触摸使能 setTouchEnabled(true); //设备背景图片 CCSprite *sprite = CCSprite::create("game.png"); sprite->setAnchorPoint(ccp(0,0)); sprite->setPosition(ccp(0,0)); addChild(sprite); createOneFish(); //起定时器不断的创建鱼 schedule(schedule_selector(GameLayer::createFishTick),1.0f); return true; } void GameLayer::createFishTick(float dt) { createOneFish(); } void GameLayer::createOneFish() { CCSprite *fish = CCSprite::create("fish.png"); //给鱼设置随机起始位置 float x = 400 + rand()%80; float y = 20 + rand()%300; fish->setPosition(ccp(x,y)); //给鱼设置随机缩放 float scale = 1 + rand()%5; fish->setScale(1/scale); addChild(fish); //移动 float t = 1 + rand()%3; CCMoveTo *move = CCMoveTo::create(t,ccp(200,y)); //跳跃 float t2 = 2 + rand()%2; CCJumpTo *jump = CCJumpTo::create(t2,ccp(50,y),50,1); //回移 CCMoveTo *move3 = CCMoveTo::create(t,ccp(400,y)); //X方向翻转 CCCallFuncO* turnBack = CCCallFuncO::create(this,callfuncO_selector(GameLayer::turnFishBack),fish); //释放鱼 CCCallFuncO* movefish = CCCallFuncO::create(this,callfuncO_selector(GameLayer::movefinish),fish); //整个动作序列 CCFiniteTimeAction *allActions = CCSequence::create(move,jump,turnBack,move3,movefish,NULL); fish->runAction(allActions); } void GameLayer::turnFishBack(CCObject *sender) { CCSprite *sprite = (CCSprite *)sender; sprite->setFlipX(true); } void GameLayer::movefinish(CCObject *sender) { CCSprite *sprite = (CCSprite *)sender; sprite->removeFromParentAndCleanup(true); } //处理触摸事件,继承于CCLayer void GameLayer::ccTouchesEnded(CCSet * pTouch,CCEvent * pEvent) { CCLog("touch"); CCTouch *oneTouch = (CCTouch *)pTouch->anyObject(); CCPoint glPoint = oneTouch->getLocation(); CCPoint layerPoint = convertToNodeSpace(glPoint); //子弹 CCSprite * bulletsprite = CCSprite::create("bullet.png"); bulletsprite->setPosition(ccp(20,-20)); bulletsprite->setScale(1/1.6); addChild(bulletsprite); //设置子弹偏移 bulletsprite->setRotation(20); //子弹发射 CCMoveTo *move = CCMoveTo::create(0.5,layerPoint); CCCallFuncO *bulletFinish = CCCallFuncO::create(this,callfuncO_selector(GameLayer::bulletMovefinish),bulletsprite); CCFiniteTimeAction *allAction = CCSequence::create(move,bulletFinish,NULL); bulletsprite->runAction(allAction); } void GameLayer::bulletMovefinish(CCObject *sender) { CCLog("bulletMovefinish"); CCSprite * sprite = (CCSprite *)sender; CCPoint current = sprite->getPosition(); //捕鱼网 CCSprite *netsprite = CCSprite::create("wang.png"); netsprite->setPosition(current); netsprite->setScale(0.8); addChild(netsprite); //捕鱼网动画效果 CCScaleTo * scale1 = CCScaleTo::create(0.5,0.6); CCScaleTo * scale2 = CCScaleTo::create(0.5,0.2); CCScaleTo * scale3 = CCScaleTo::create(0.5,0.6); CCScaleTo * scale4 = CCScaleTo::create(0.5,0.7); CCScaleTo * scale5 = CCScaleTo::create(0.5,0.0); //爆炸效果 CCCallFuncO* scaleDone = CCCallFuncO::create(this,callfuncO_selector(GameLayer::scaleDone),netsprite); CCFiniteTimeAction *allaction = CCSequence::create(scale1,scale2,scale3,scale4,scale5,scaleDone,NULL); netsprite->runAction(allaction); sprite->removeFromParentAndCleanup(true); } void GameLayer::scaleDone(CCObject * sender) { CCSprite *netsprite = (CCSprite *)sender; CCPoint p = netsprite->getPosition(); CCSprite *boom = CCSprite::create("boom.png"); boom->setPosition(p); addChild(boom); //爆炸效果动画 CCScaleTo * scale = CCScaleTo::create(0.5,0.6); CCDelayTime * dt = CCDelayTime::create(1.0f); CCScaleTo * scale2 = CCScaleTo::create(0.5,0.0); CCFiniteTimeAction *allaction = CCSequence::create(scale,dt,scale2,NULL); boom->runAction(allaction); netsprite->removeFromParentAndCleanup(true); } GameLayer * GameLayer::create() { GameLayer *layer = new GameLayer(); layer->init(); layer->autorelease(); return layer; } CCScene * GameLayer::scene() { GameLayer * layer = GameLayer::create(); CCScene * s = CCScene::create(); s->addChild(layer); return s; }