游戏开始层

#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实现经典飞机大战相关推荐

  1. 学不动了,尝试用Android Jetpack Compose重写微信经典飞机大战游戏

    前段时间看了TechMerger大佬写的<一气呵成:用Compose完美复刻Flappy Bird!>,甚是有趣,按耐不住那躁动的心,笔者决定跟随大佬的脚步通过写游戏的方式学习Jetpac ...

  2. cocos2d-x 3.2 |飞机大战:飞机与子弹

    cocos2d-x 3.2 |飞机大战:飞机与子弹 前情提要:飞机大战第二篇 实现飞机与子弹 如下:新建类----->Plane + Bullet 第一步:飞机类 Plane.h #includ ...

  3. cocos2d-x 3.2 |飞机大战:技能

    cocos2d-x 3.2|飞机大战:技能 前情提要:飞机大战第四篇 实现敌机掉落技能 如下: 新建类----->Tool 第一步:技能类 Tool.h #include <stdio.h ...

  4. cocos2d-x小游戏——飞机大战

    上周,我做了一个基于 cocos2d-x 的飞机大战的游戏,因为我刚学cocos2d-x没多久,所以这个飞机大战很多都是看着别人的教程,再加上自己的一些想法,来做的. 下面我想说一说我的思路. 飞机大 ...

  5. cocos2d-x 3.2 |飞机大战:碰撞与分数

    cocos2d-x 3.2 |碰撞与分数 前情提要:飞机大战第五篇 实现碰撞与分数 思路:游戏里物体与物体的碰撞每帧都会检测 这里我们利用前面讲过的贪吃蛇移动原理 利用update方法来实时检测 如下 ...

  6. Cocos2d-x3.X入门游戏实例(一) 经典飞机大战开发笔记

    有一个多月没有写学习笔记了,主要是在学习了一段时间后觉得想整个小游戏,选来选去选择了微信飞机大战作为处女作.飞机大战内容简单,比较适合刚学习Cocos2dx的新手拿来练手,而且网上的教程和源码都很多, ...

  7. Java经典飞机大战游戏

    <飞机大战>这款小游戏相信许多朋友早就已经玩过,但是作为小白,学习过程中就是要拿各种经典项目来练手,飞机大战就是老师拿来让我们练手的一个小项目.老师给我们提供了素材包,让我们自由发挥,刚开 ...

  8. 飞机大战python介绍_用 Python 写一个经典飞机大战

    while running: # 设置游戏帧率为 60 clock.tick(60) if not is_pause and not is_game_over: if not player.is_hi ...

  9. java飞机大战飞机背景滚动_微信经典飞机大战之二:飞机起飞(背景滚动)

    飞机起飞,其实质上是背景在滚动,相对运行引起的错觉. 我们利用2张一样的背景来循环滚动,然后通过每次滚动的时间间隔和像素间隔来控制背景滚动的速度,也就是飞机飞行的速度.注意:图片的高度一定要比屏幕高度 ...

最新文章

  1. Flex与.NET互操作(十二):FluorineFx.Net的及时通信应用(Remote Shared Objects)(三)
  2. Python MyQR
  3. [置顶] CopyU!v2插件合集 [2013年7月18日更新]
  4. Python学习笔记——条件分支和while循环
  5. 宇视摄像头ip搜索软件下载_搜索资源?下载资源?一款软件就给你安排的妥妥的...
  6. android学习的java,android学习之java常识
  7. android开发比例图表,Android开发中如何使用绘制图表
  8. .Net Core报“‘GB2312‘ is not a supported encoding name. For information on defining a custom encod”的错误
  9. Linux/Android——input_handler之evdev (四) 【转】
  10. MySql-Mysql技术内幕~SQL编程学习笔记(1)
  11. 破解XP 管理员Administrator密码
  12. Win32编程之基于MATLAB与VC交互的幻方阵(魔方阵)输出
  13. js获取当前域名的方法
  14. Metro风格的CSS框架 BootMetro
  15. Server 2003无法访问共享。您可能没有权限使用网络资源
  16. linux环境hexo和GithubPages搭建个人博客
  17. 12款超牛的办公神器,个个功能强大,让工作轻松不累!
  18. Win10笔记本扩展显示屏模糊处理办法
  19. 探索语言交互技术在政务数字化的应用
  20. 象与骑象人--幸福的假设

热门文章

  1. 排得更好VS估得更准VS搜的更全「推荐、广告、搜索」算法间到底有什么区别?...
  2. Facebook、阿里等大佬现身说法,NLP是否被高估了?
  3. 【面试必备】奉上最通俗易懂的XGBoost、LightGBM、BERT、XLNet原理解析
  4. 基于Flume的美团日志收集系统(一)架构和设计
  5. 最强Java面试题全部合集,涵盖BAT大厂面试必考的9大技术!-强烈建议收藏
  6. 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)
  7. 用flask部署模型
  8. 从贪心选择到探索决策:基于强化学习的多样性排序
  9. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建
  10. Java 注解:@PostConstruct和@PreConstruct