【cocos2d-x 3.7 飞机大战】 决战南海I (十) 游戏主场景
主场景要包括其它类的头文件
- #include "cocos2d.h"
- #include "MyPlane.h"
- #include "Bullet.h"
- #include "EnemyManager.h"
- #include "Controller.h"
- #include "BackgroundMove.h"
- #include "FlowWord.h"
在这个游戏中。我将各种碰撞检測也放到主场景中进行
- void gameUpdate(float dt); // 碰撞检測
- bool bulletCollisionEnemy(Sprite* pBullet); // 子弹和敌机碰撞
- void enemyCollisionPlane(); // 我机和敌机、敌机子弹碰撞
- virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);
当然。主场景要有各个类的实例做变量
- MyPlane *planeLayer;
- Bullet *bulletLayer;
- EnemyManager *enemyLayer;
- Controller *controlLayer;
主场景的实现
- TollgateOne::TollgateOne() : planeLayer(NULL), bulletLayer(NULL), enemyLayer(NULL), controlLayer(NULL)
- {
- }
- TollgateOne::~TollgateOne()
- {
- _eventDispatcher->removeEventListenersForTarget(this);
- }
- cocos2d::Scene* TollgateOne::createScene()
- {
- auto scene = Scene::create();
- auto layer = TollgateOne::create();
- scene->addChild(layer);
- return scene;
- }
- bool TollgateOne::init()
- {
- if (!Layer::init())
- {
- return false;
- }
- // 启动触摸机制
- this->setTouchEnabled(true);
- // 背景无限滚动
- auto m_back = BackgroundMove::create();
- this->addChild(m_back,0);
- //游戏開始 飘字效果
- auto dictionary = Dictionary::createWithContentsOfFile("fonts/AboutMe.xml");
- auto m_flow = FlowWord::create();
- m_flow->showFlowWord(
- ((__String *)(dictionary->objectForKey("play")))->getCString(),
- Point(Director::getInstance()->getVisibleSize().width / 2+60, Director::getInstance()->getVisibleSize().height/2),
- m_flow->otherFlowWord()
- );
- this->addChild(m_flow);
- //游戏更新
- this->schedule(schedule_selector(TollgateOne::gameUpdate));
- // 增加控制层
- controlLayer = Controller::create();
- this->addChild(controlLayer);
- // 增加飞机
- planeLayer = MyPlane::create();
- this->addChild(planeLayer,1);
- // 增加敌机和分数显示
- enemyLayer = EnemyManager::create();
- enemyLayer->bindController(controlLayer);
- this->addChild(enemyLayer,1);
- // 开启子弹
- bulletLayer = Bullet::create();
- bulletLayer->bindEnemyManager(enemyLayer);
- this->addChild(bulletLayer,1);
- //对返回键的响应
- auto m_listener = EventListenerKeyboard::create();
- m_listener->onKeyReleased = CC_CALLBACK_2(TollgateOne::onKeyReleased, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(m_listener, this);
- return true;
- }
- void TollgateOne::gameUpdate(float dt)
- {
- bool bMoveButt = false;
- //子弹和敌机对碰
- for (auto& eButtle : bulletLayer->vecBullet)
- {
- Sprite* pBullet = (Sprite*)eButtle; // 获取子弹精灵
- bMoveButt = bulletCollisionEnemy(pBullet);
- if (bMoveButt)
- {
- // 子弹删除了。无需再遍历
- return;
- }
- }
- // 敌机、敌机子弹与我方飞机碰撞
- enemyCollisionPlane();
- }
- bool TollgateOne::bulletCollisionEnemy(Sprite* pBullet)
- {
- for (auto& eEnemy : enemyLayer->vecEnemy)
- {
- Enemy* pEnemySprite = (Enemy*)eEnemy;
- // 是否发生碰撞
- if (pBullet->boundingBox().intersectsRect(pEnemySprite->getBoundingBox()))
- {
- // 飞机仅仅剩下一格生命值
- if (1 == pEnemySprite->getLife())
- {
- pEnemySprite->loseLife(); // 知道为什么这里也要loselife吗?你能够试着凝视掉看看
- enemyLayer->blowupEnemy(pEnemySprite);
- }
- else
- {
- pEnemySprite->loseLife();
- }
- //删除子弹
- bulletLayer->removeBullet(pBullet);
- return true;
- }
- }
- return false;
- }
- void TollgateOne::enemyCollisionPlane()
- {
- Sprite* pPlane = (Sprite*)planeLayer->getChildByTag(AIRPLANE);
- for (auto& eEnemy : enemyLayer->vecEnemy)
- {
- Enemy* pEnemySprite = (Enemy*)eEnemy;
- // 是否发生碰撞
- if (pPlane->boundingBox().intersectsRect(pEnemySprite->getBoundingBox()) && pEnemySprite->getLife() > 0)
- {
- if (1 == planeLayer->getAlive())
- {
- planeLayer->loseAlive();
- controlLayer->getSaveData()->save();
- this->unscheduleAllSelectors();
- this->bulletLayer->StopBulletShoot();
- this->planeLayer->blowUp();
- Director::getInstance()->replaceScene(
- TransitionMoveInT::create(0.8f, GameOver::createScene())); // 替换场景
- }
- else
- planeLayer->loseAlive();
- }
- }
- for (auto& eEnemyBullet : bulletLayer->vecEnemyBullet)
- {
- Sprite* pEnemyBullet = (Sprite*)eEnemyBullet; // 获取子弹精灵
- // 是否发生碰撞
- if (pPlane->boundingBox().intersectsRect(pEnemyBullet->getBoundingBox()))
- {
- if (1 == planeLayer->getAlive())
- {
- planeLayer->loseAlive();
- controlLayer->getSaveData()->save();
- this->unscheduleAllSelectors();
- this->bulletLayer->StopBulletShoot();
- this->planeLayer->blowUp();
- Director::getInstance()->replaceScene(
- TransitionMoveInT::create(0.8f, GameOver::createScene())); // 替换场景
- }
- else
- planeLayer->loseAlive();
- bulletLayer->removeEnemyBullet(pEnemyBullet);
- return;
- }
- }
- }
- void TollgateOne::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)
- {
- if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)
- {
- Director::getInstance()->replaceScene(HelloWorld::createScene());
- }
- }
主场景就是将其他类融合在一起,碰撞检測也是在这里进行。
注意一下这里的事件监听,和開始界面的不太一样。但都要在析构函数中移除。
【cocos2d-x 3.7 飞机大战】 决战南海I (十) 游戏主场景的更多相关文章
- 【cocos2d-x 3.7 飞机大战】 决战南海I (十二) 游戏结束场景
游戏结束的时候,要显示分数.还要可以选择是返回主场景还是退出游戏 // 退出游戏 void menuCloseCallback(cocos2d::Ref* pSender); // 返回主界面 voi ...
- cocos2dx实现经典飞机大战
游戏开始层 #ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING ...
- cocos2dx 3.0 飞机大战
因为课程须要.然后又水平有限.所以写了个飞机大战.加上不会画画.所以图片资源也是从微信apk解压出来的,设计思路參考的偶尔e网事. 闲话不说.先讲一下设计.大体上一共分为3个场景.场景以下是Layer ...
- 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)
微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...
- 【一】仿微信飞机大战cocos2d-x3.0rc1
參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战 cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)
最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...
- Cocos2d-x飞机大战教程笔记
咳咳~跟着大神的教程学做Cocos2d-x的飞机大战...鉴于我是那种跟着教程都会出非常多错的人,所以还是一路跟着做些笔记比較好.并且因为是用课余时间,所以仅仅能断断续续地做,写下来也好让自己别忘记~ ...
- js实例--飞机大战
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
随机推荐
- 【知识总结】线性筛_杜教筛_Min25筛
首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...
- ios cocos2d-x 多点触摸
需要在 AppController.mm文件中添加一句多点触摸支持: [_view setMultipleTouchEnabled:true];
- [转]自适应网页设计(Responsive Web Design)
本文转自:http://www.ruanyifeng.com/blog/2012/05/responsive_web_design.html 作者: 阮一峰 日期: 2012年5月 1日 随着3G的普 ...
- MVC系列学习(十一)-客户端的验证
1.通过一个实例,来了解MVC中强大的验证功能 1.1新建一个 [基本] 的mvc项目,因为要用到验证的js,然后在一个视图中写上一下代码,以及Model中的代码如下 [注]在调用html.EditF ...
- struts2.1.6存在中文乱码的bug
如题,后续版本中已解决:可以通过添加filter的方式解决.
- 既可以输入也可以选择的input框
datalist 是h5中既可以选择也可以输入的属性 具体代码如下 <input list="datalist"/><datalist id="data ...
- HTML和CSS网页开发基础
一 HTML文档结构 HTML文档结构:<html>.<head>.<title>.<body>构成HTML页面中最基本的元素. HTML常用标记:1. ...
- 六时车主 App 隐私政策
六时车主 App 隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义 ...
- 【sqli-labs】 less48 GET -Error based -Blind -Numeric -Order By Clause(GET型基于盲注的整型Order By从句注入)
图片还是47...访问的的确是48 这个是基于bool的盲注 http://192.168.136.128/sqli-labs-master/Less-48/?sort=1 and sleep(0.1 ...
- 运维是做什么的?史上最全互联网Linux工作规划!十分钟找到linux运维工程师职业方向!
首先祝贺你选择学习Linux,你可能即将踏上Linux的工作之旅,出发之前,让我带你来看一看关于Linux和Linux运维的一切. Linux因其高效率.易于裁剪.应用广等优势,成为了当今中高端服务器 ...