因为课程须要。然后又水平有限。所以写了个飞机大战。加上不会画画。所以图片资源也是从微信apk解压出来的,设计思路參考的偶尔e网事

闲话不说。先讲一下设计。大体上一共分为3个场景。场景以下是Layer

開始场景:WelcomeScene -->WelcomeLayer  类似欢迎界面

游戏主场景:GameScene  --> GameLayer  游戏元素加入 和 碰撞检測

结束场景:GameOverScene -->GameOverLayer

然后是游戏的元素,在GameLayer加入,一个分为4个Layer:

PlaneLayer:主角层

EnemyLayer:敌机层 ,分为3种,每种敌机生命值不一样

UFOLayer: 道具层,bullet和加bomb

BulletLayer:子弹层 bullet 和mutiBullet

然后简单讲一下碰撞检測的实现:

if(bullet->boundingBox().intersectsRect(enemy1->getBoundingBox())){
if(enemy1->getLife() == 1){
enemy1->loseLife();
bulletsToDelete->addObject(bullet);
enemy1ToDelete->addObject(enemy1);
score += ENEMY1_SCORE;
this->mControlLayer->updateScore(score);
}
}
Rect Enemy::getBoundingBox(){
Rect rect = this->m_sprite->boundingBox();
Point pos = this->convertToWorldSpace(rect.origin);
return Rect(pos.x, pos.y, rect.size.width, rect.size.height);
}

还有再来就是子弹层的处理:

子弹发射须要步骤:1.加入子弹,2.移动子弹。3移除子弹

因为须要源源不断的发射子弹,所以将子弹加入到一个SpriteBatchNode节点中。然后在这个SpriteBatchNode节点对子弹进行加入,移动,和移除,这样子做的优点是仅仅须要渲染一次。减少内存消耗

auto texture = TextureCache::getInstance()->textureForKey("shoot.png");
bulletBatchNode = SpriteBatchNode::createWithTexture(texture);
this->addChild(bulletBatchNode);

然后再讲一下图片资源的处理:

下载这个工具:plist解析工具

将微信须要的资源解析出来。然后能够用photoshop处理一下,哈哈。能够将微信的图片去掉,随便p上自己的名字

然后用TexturePacker打包。恩。大概就像这样子

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bl9memxs/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

最后再讲一下编译成androidproject的步骤和细节:

1.先在Android.mk文件里加入全部必须的cpp

2.记得在AppDelegate cpp 中加入分辨率适应

glview->setDesignResolutionSize(480,800,ResolutionPolicy::SHOW_ALL);

3.在proj.android目录以下改动AndroidManifest.xml 竖屏属性:

android:screenOrientation="portrait"

4.cmd到project文件夹。命令:cocos compile -p android -j 4

源代码:飞机大战

cocos2dx 3.0 飞机大战的更多相关文章

  1. cocos2dx实现经典飞机大战

    游戏开始层 #ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING ...

  2. 【cocos2d-x 3.7 飞机大战】 决战南海I (十) 游戏主场景

    主场景要包括其它类的头文件 #include "cocos2d.h" #include "MyPlane.h" #include "Bullet.h& ...

  3. 【cocos2d-x 3.7 飞机大战】 决战南海I (二) 我方飞机的实现

    在上一篇中.我们实现了游戏的開始界面,接下来要实现游戏的主界面.主界面包括地图.我方飞机.敌机等 先来实现我方飞机 我方飞机具有哪些属性呢? 飞机要具有生命值.要有动画效果(尾部喷气),飞机不可以飞出 ...

  4. 【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理

    敌方飞机应该不定时的出现,有自己的生命周期.运动轨迹.这个类用来管理敌机的产生.移动.爆炸.销毁等. 敌机管理类主要函数例如以下 //绑定控制器(更新分数) void bindController(C ...

  5. 【cocos2d-x 3.7 飞机大战】 决战南海I (七) 控制器的实现

    控制器中的功能并不多,主要是以下这些 //对玩家分数的操作 CC_SYNTHESIZE_READONLY(SaveData *, m_saveData, SaveData); void update( ...

  6. 【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现

    如今来实现敌机类 敌机和我方飞机相似,具有生命值.能够发射子弹.而且有自己的运动轨迹.事实上能够为它们设计一个共同的基类,这样能够更方便扩展. 不同的敌机,应设置不同的标识.属性 // 敌机生命值 c ...

  7. 【cocos2d-x 3.7 飞机大战】 决战南海I (八) 背景移动

    採用双层背景.这样效果更好 .h class BackgroundMove : public Layer { public: BackgroundMove(); ~BackgroundMove(); ...

  8. 【cocos2d-x 3.7 飞机大战】 决战南海I (十二) 游戏结束场景

    游戏结束的时候,要显示分数.还要可以选择是返回主场景还是退出游戏 // 退出游戏 void menuCloseCallback(cocos2d::Ref* pSender); // 返回主界面 voi ...

  9. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

随机推荐

  1. Android 中文API (70) —— BluetoothDevice[蓝牙]

    前言 本章内容是  android.bluetooth.BluetoothDevice,为Android蓝牙部分的章节翻译.蓝牙设备类,代表了蓝牙通讯国足中的远端设备.版本为 Android  2.3 ...

  2. 对象图(Object Diagram)—UML图(三)

    一.用一张图来介绍一下对象图的基本内容 二.对象图与类图的基本差别 三.对象图实例

  3. 【node.js】本地模式安装express:'express' 不是内部或外部命令,也不是可运行的程序或批处理文件。

    今天闲来无事想起了node.js,因此到网上下载了一个node.js的安装程序进行安装.其中: 安装程序:node-v0.11.13-x64.msi PC系统:Windows 7 自定义安装路径:D: ...

  4. CSS样式表基础知识、样式表的分类及选择器

    一.CSS基本概念: CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/    此为注释语法 二.样式表的分类 1.内联样式表(和html联合 ...

  5. Struts2项目中使用Ajax报错

    在Struts2项目中使用Ajax向后台请求数据,当添加了json-lib-2.3-jdk15.jar和struts2-json-plugin-2.3.4.1.jar两个包时,在result中配置ty ...

  6. Xcode Could not load NIB 的一个问题解决

    # Could not load NIB 的一个问题 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pr ...

  7. spring和mybatis整合进行事务管理

    1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...

  8. mysql root密码重置

    1.修改my.cnf #位置一般是 /etc/my.cnf 2.重启mysql服务 service mysqld restart 3.进入mysql mysql -uroot -p 然后直接回车 4. ...

  9. [LeetCode]题解(python):065-Valid Number

    题目来源: https://leetcode.com/problems/valid-number/ 题意分析: 输入一个字符串,判断这个字符串表示的是不是一个有效的数字.比如: "0&quo ...

  10. SQL——表结构或数据的复制

    一.复制表结构及数据到新表 create table new_tb select * from old_tb 二.只复制表结构到新表 create table new_tb select * from ...