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

运行结果

开始界面123

游戏主界面
游戏结束界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【包邮送书活动】20211018期-开奖通知

奖品:包邮实体书 参与方式:CSDN点赞评论收藏文章即可参与、或公众号 开奖通知方式(老是有人中奖联系不上,我很郁闷):朋友圈、blink、私信、发文 抽奖程序说明:https://notomato.blog.csdn.ne…

Cocos2dx实现象棋之布局

开始界面 #ifndef SCENESTART_H #define SCENESTART_H #include "cocos2d.h" #include "SceneGame.h" USING_NS_CC;class SceneStart : public CCLayer { public://SceneStart();static CCScene * scene();CREATE_FUNC(SceneStart)bool init();bool ccTou…

《画解算法》3. 无重复字符的最长子串【python3丨简单】

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家、C站总榜第8🏆、HDZ核心组成员。欢迎点赞、收藏、评论 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abca…

【关注】人类的智力是如何发展起来的?《自然》发布三大科学假说

来源:天大神经工程摘要:我们人类的远祖——著名的阿法南方古猿Lucy生活在三至四百万年前,身体构造介于现代人类与动物之间。我们人类的远祖——著名的阿法南方古猿Lucy生活在三至四百万年前,身体构造介于现代人类与动物之间。南方…

工业4.0进行时:增强现实技术如何变革制造业

来源:资本实验室摘要:说到增强现实,很多人可能首先会想到曾在一夜之间席卷全球,风靡世界的精灵宝可梦AR游戏。聚焦前沿科技创新与传统产业升级说到增强现实,很多人可能首先会想到曾在一夜之间席卷全球,风靡…

我不藏了:7个技术体系、共100篇文章、总计1OO万字

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家、C站总榜第8🏆、HDZ核心组成员。欢迎点赞、收藏、评论 🍅 粉丝专属福利:知识体系、面试题库、技术互助、简历模板。文末公众号领取 &#x1f345…

车联网解决方案(PPT)

来源:智车科技未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网&#…

刚入职场的菜鸟,这些大数据知识点,你必须掌握了!

一、Hadoop入门 1、常用端口号 hadoop3.x HDFS NameNode 内部通常端口:8020/9000/9820 HDFS NameNode 对用户的查询端口:9870 Yarn查看任务运行情况的:8088 历史服务器:19888 hadoop2.x HDFS NameNode 内部通常端口&#xf…

Google发布“多巴胺”开源强化学习框架,三大特性全满足

编译整理 | Just编辑 | 阿司匹林来源:AI科技大本营强化学习是一种非常重要 AI 技术,它能使用奖励(或惩罚)来驱动智能体(agents)朝着特定目标前进,比如它训练的 AI 系统…

5万成员丨CSDN 大数据领域网红社区!

一、社区愿景 社区地址:https://bbs.csdn.net/forums/ITID 我的梦想很大,大到致力于打造大数据领域第一社区,赋能中国技术社区蓬勃发展。 我的“格局”很小,小到每一篇优质文章,都会不吝啬加精,置顶。 …

坦克大战实现

先将常用的函数与头文件,宏定义等写到一个公共类中 #ifndef __Common_H__#define __Common_H__#include "cocos2d.h"#include "SimpleAudioEngine.h"#include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT;#define winSize CCDirector:…

汽车传感器:自动驾驶“第一步”,新兴领域中国有望突围

来源:(中金公司:黄乐平 )摘要:从L3级量产车奥迪A8,到L4级量产巴士百度阿波龙,L3级自动驾驶已逐渐开始落地量产。位处产业链上游的汽车传感器行业最先感受到春意,各种技术路线争鸣&am…

怎么改变asp.net中.sln文件的默认生成路径

转自:http://zhidao.baidu.com/question/149657564.html 你新建解决方案就可以改 转载于:https://www.cnblogs.com/hellolong/articles/2801731.html

腾讯阿里是否开始走向没落,用新互联网大脑模型分析

前言:虽然腾讯面临头条、抖音、陌陌、钉钉等新兴社交平台挑战,阿里面临海尔COSMOPlat,三一重工树根互联、美国GE Predix、德国西门子Mindsphere等工业互联网平台的挑战,但其核心优势依然存在,积累势能继续提高&#xf…

这5个超级经典SQL都不会,回去等通知吧

🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌ 简历模板、PPT模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 一、每门课程问题 用一条 SQL 语句…

12.4scrum report

转载于:https://www.cnblogs.com/76er/archive/2012/12/04/2802336.html

从《2018年全球创新指数报告》看中国创新力!

作者:杨柯巍 张原编辑:煜 佳来源:中国电子信息产业发展研究院摘要:2018 年7 月10 日,世界知识产权组织(WIPO)、美国康奈尔大学和欧洲工商管理学院(INSEAD)共同发布《2018…

【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】

活动介绍: 「数据仓库技术交流群」已经正式启动每日SQL打卡,帮助大家扎实基础,努力工作之余,别忘了自我提升。 欢迎报名和邀请小伙伴参与,一个人可能走得很快,但一群人会走得很远。 活动流程: 1…

如何从操作系统安装文件提取驱动文件/ How to extract driver files from setup files (win 7)...

在部署 OS 过程中遇到一个问题,需要找到操作系统对于的驱动文件。由于OS都是直接从微软服务器上面copy下来的,所以,要找到对应的 Device Drivers很困难。好不容易找到一个Drivers的文件夹,发现各种驱动啊,估计也只有当…

【每日SQL打卡】​​​​​​​​​​​DAY 2 丨组合两个表【难度简单】

活动介绍: 「数据仓库技术交流群」已经正式启动每日SQL打卡,帮助大家扎实基础,努力工作之余,别忘了自我提升。 欢迎报名和邀请小伙伴参与,一个人可能走得很快,但一群人会走得很远。 🍅题目汇总(…