cocos2dx实现经典飞机大战
生活随笔
收集整理的這篇文章主要介紹了
cocos2dx实现经典飞机大战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
游戲開始層
#ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING_NS_CC;class LayerGameStart :public CCLayer { public:static CCScene * scene();CREATE_FUNC(LayerGameStart);bool init();void addStartGamePicture();void addPreLoadMusic();void toMainGameCallback();};#endif游戲主場景
#include "cocos2d.h" #include "Plane.h" #include "LayerGameStart.h" #include "LayerBullet.h" #include "LayerEnemy.h" #include "LayerControl.h" #include "LayerFood.h" #include "LayerGameOver.h" USING_NS_CC;const int SMALL_SCORE = 1000; const int MID_SCORE = 6000; const int BIG_SCORE = 30000;const int MAX_BIGBOOM_COUNT = 100000; const int TAG_BIGBOOM = 1000; const int TAG_BIGBOOMCOUNT = 2000; class LayerGameMain :public CCLayer { public:static CCScene * scene();CREATE_FUNC(LayerGameMain);bool init();//加載主場景背景void addBackGround();//背景動起來void movingBackGround(float dt);void addHero();void addBulletLayer();void addEnemyLayer();void addCtrlLayer();void addFoodLayer();void updateBigBoomCount(int bigBoomCount);void boomMenuCallBack(CCObject * obj);enum BACKGROUND{BACK1, BACK2};void update(float dt);virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);LayerBullet * _bulletLayer;LayerEnemy * _enemyLayer;LayerControl * _ctrlLayer;LayerFood * _foodLayer;static int score;static void setScore(int num);int bigBoomCount;};碰撞檢測
其中分為子彈與飛機的碰撞檢測,飛機與飛機的碰撞檢測,其中敵機分為大飛機,中飛機與小飛機,原理大致相同,這里只展示小飛機的原理與方法。
CCARRAY_FOREACH(_bulletLayer->_bulletArray, bt){CCSprite * bullet = (CCSprite*)bt;CCArray * smallEnemyToDel = CCArray::create(); CCARRAY_FOREACH(_enemyLayer->smallArray, et){Enemy * smallEnemy = (Enemy *)et;if (bullet->boundingBox().intersectsRect(smallEnemy->getBoundingBox())){CCLog("%d", smallEnemy->getLife());if (smallEnemy->getLife() == 1){smallEnemy->loseLife();bulletsToDel->addObject(bullet);smallEnemyToDel->addObject(smallEnemy);score += SMALL_SCORE;_ctrlLayer->updataScore(score);}}}CCARRAY_FOREACH(smallEnemyToDel, et){Enemy * smallEnemy = (Enemy*)et;_enemyLayer->smallEnemyBlowUp(smallEnemy);}smallEnemyToDel->release(); }“`
飛機與飛機的碰撞檢測
//hero vs enemySmall CCRect planeRect = Plane::getInstance()->boundingBox(); planeRect.origin.x += 30; planeRect.origin.y += 20; planeRect.size.width -= 60; planeRect.size.height -= 40;CCARRAY_FOREACH(_enemyLayer->smallArray,et) {Enemy * smallEnemy = (Enemy *)et;if (planeRect.intersectsRect(smallEnemy->getBoundingBox())){_bulletLayer->stopShoot();unscheduleAllSelectors();Plane::getInstance()->blowUp();Plane::getInstance()->removePlane();_enemyLayer->smallEnemyBlowUp(smallEnemy);} }飛機大戰的分層
由于游戲的復雜性,需要將精靈分為好幾個層次加入到游戲中,可以分為控制層,敵機層,食物層,子彈層等
控制層代碼
#ifndef __LayerControl_H__#define __LayerControl_H__#include "cocos2d.h"USING_NS_CC;class LayerControl : public CCLayer{public:CREATE_FUNC(LayerControl);bool init();void menuCallBack(CCObject *obj);void updataScore(int score);private:CCMenuItemSprite * pauseMenuItem;CCLabelBMFont * scoreItem;};#endif食物層代碼
#ifndef __LayerFood_H__ #define __LayerFood_H__#include "cocos2d.h" USING_NS_CC; class LayerFood :public CCLayer { public:CREATE_FUNC(LayerFood);bool init();//void addMultiBullets(float dt);//void multiBulletsMoveFinished(CCNode * pSender);//void removeMultiBullets(CCSprite *mb);void addBigBoom(float dt);void bigBoomMoveFinished(CCNode *pSender);void removeBigBoom(CCSprite *bb);public:CCArray * multiBulletArray;CCArray * bigBoomArray;};#endif敵機層代碼
#ifndef __LayerEnemy_H__ #define __LayerEnemy_H__#include "cocos2d.h" #include "Enemy.h"USING_NS_CC;const int SMALL_MAXLIFE = 1; const int MID_MAXLIFE = 3; const int BIG_MAXLIFE = 5;class LayerEnemy: public CCLayer { public:CREATE_FUNC(LayerEnemy);bool init();void addSmallEnemy(float dt);void smallEnemyMovefinished(CCNode *node);void smallEnemyBlowUp(Enemy * smallEnemy);void removeSmallEnemy(CCNode * target, void * data);void removeAllSmallEnemy();void addMidEnemy(float dt);void midHitAnimate(Enemy *midEnemy);void midEnemyMovefinished(CCNode *node);void midEnemyBlowUp(Enemy * midEnemy);void removeMidEnemy(CCNode * target, void * data);void removeAllMidEnemy();void addBigEnemy(float dt);void bigHitAnimate(Enemy *midEnemy);void bigEnemyMovefinished(CCNode *node);void bigEnemyBlowUp(Enemy * bigEnemy);void removeBigEnemy(CCNode * target, void * data);void removeAllBigEnemy();void removeAllEnemy();CCArray * smallArray;CCArray *midArray;CCArray *bigArray; };#endif子彈層代碼
#ifndef __LayerBullet_H__ #define __LayerBullet_H__#include "cocos2d.h" USING_NS_CC;class LayerBullet: public CCLayer { public:CREATE_FUNC(LayerBullet);bool init();void startShoot();void stopShoot();void addBulletCallback(float dt);void bulletMoveFinished(CCNode* node);void removeBullet(CCSprite* bullet);CCArray *_bulletArray;CCSpriteBatchNode * _bulletBatchNode; };#endif運行結果
總結
以上是生活随笔為你收集整理的cocos2dx实现经典飞机大战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维与三维之间的桥梁——点云
- 下一篇: 【每日SQL打卡】