3D游戏现在玩起来门槛还是挺高的。不过如果在Cocos2d-x引擎加入3D扩展,实现2.5D游戏效果又会怎么样?

1.概述

先上大会现场演示图:

Apk下载: http://pan.baidu.com/s/1ntM75bV
源码下载: https://github.com/chukong/EarthWarrior3D.git ,给个star不费电。。。
开发环境:Cocos2d-x v3.0 + Sprite3D扩展

适用平台:Mac/iOS/Android

2.Sprite3D扩展

2.1. Sprite3D

sprite3D扩展目前可以支持加载静态obj模型。

[cpp] view plaincopy
  1. auto model = Sprite3D::create("3dmodel.obj", "texture.png");

2.2. Toon Shading

Cocos2d-x精灵不能做发光效果,而Sprite3D中加入了发光函数,指定outline width和color就行了。

[cpp] view plaincopy
  1. model->setOutline(1.5, Color3B(0,0,0)); // 设置发光宽度1.5,黑色

2.3. 3D API

3D API是Cocos2d-x v3.0就具有的属性,源码可以到Node上看。

[cpp] view plaincopy
  1. node->setPosition3D(Vertex3F(x,y,z));//设置位置
  2. Vertex3F pos = node->getPosition3D();
  3. node->setRotation3D(Vertex3F(x,y,z));//设置旋转
  4. Vertex3F rot = node->getRotation3D();

其中Vertex3F当然就是指定了三维空间。而3D API同样也移植到了一些动作中,比如:

[cpp] view plaincopy
  1. node->runAction(RotateBy::create(Vertex3F(x,y,z)));

完全没问题。

3.EarthWarrior

Classes/3d文件夹包含了Sprite3D。其余文件为游戏逻辑控制,游戏总共三个场景

3.1. 主菜单界面(MainMenuScene)

包含 :主菜单场景(MainMenuScene),飞机模型(Plane),License和Credits层(LicenseLayer)。

关键点:①主界面3D飞机的实现

[cpp] view plaincopy
  1. //Plane.cpp
  2. _Model = Sprite3D::create("playerv002.obj", "playerv002_256.png");
  3. if(_Model){
  4. _Model->setScale(55);
  5. ((Sprite3D*)_Model)->setOutline(0.035, Color3B::BLACK);
  6. _Model->setRotation3D(Vertex3F(originX,originY,originZ));
  7. this->setRotation3D(Vertex3F(originX, originY, originZ));
  8. this->addChild(_Model);
  9. this->scheduleUpdate();
  10. }

②对数学感兴趣的可以研究一下scheduleUpdate怎样让飞机晃啊晃。。。粒子系统这里就不再重复了。

[cpp] view plaincopy
  1. void Plane::update(float dt)
  2. {
  3. pRate+=0.01;
  4. _Model->setRotation3D(Vertex3F(0-pXA*sin(pXW*pRate),0,0-pZA*sin(pZW*pRate)));
  5. }

3.2. 载入界面(LoadingScene)

包含 :载入场景(LoadingScene),粒子管理器(ParticleManager)

 
关键点 :①Loading界面实现资源的预加载,包括音乐,纹理,粒子效果,其中纹理使用异步加载,粒子效果在ParticleManager(单例类)中加载。
②同时Loading界面也实现了游戏元素的预创建并保存在全局池中,避免游戏过程中的卡顿现象和反复create的低效,包括四类敌机和导弹Missile,在update中实现每帧创建一个,避免LoadingScene的卡顿。

③cocos Logo的旋转动画

[cpp] view plaincopy
  1. void LoadingScene::InitCoco()
  2. {
  3. Size visibleSize = Director::getInstance()->getVisibleSize();
  4. auto coco = Sprite3D::create("coconut.obj", "coco.png");
  5. if(coco)
  6. {
  7. coco->setPosition(Point(visibleSize.width/2, visibleSize.height/2-150));
  8. coco->setOutline(10,Color3B(0,0,0));
  9. addChild(coco,1);
  10. coco->runAction(RepeatForever::create(RotateBy::create(0.8f,Vertex3F(0,360,0))));
  11. }
  12. }

3.3. 游戏界面(HelloWorldScene)

包含 :游戏层(GameLayer),游戏元素基类(GameEntity),飞机类(AirCraft),玩家类(Player),敌机类(Enemies,又包括Fodder,FodderLeader,BigDude,Boss四类敌机),子弹类(Bullet,又包括PlayerBullet,Missile两类子弹),效果管理类(EffectManager),爆炸类(Explosion,又包括SmallExplosion,BigExplosion,BulletExplosion),游戏控制层(GameController,又包括BulletController,EnemyController和GameController),游戏结束层(GameOverLayer)

 
关键点:①玩家和敌机的子弹控制统一在BulletController::spawnBullet中处理。如上述游戏元素保存在全局池中,可回收利用,避免反复创建,spawnBullet会先从这个池中取出,如果该池为空才会创建对于的子弹。
②敌机的处理也是采用相同的方式,在EnemyController::spawnEnemy中处理,如果该池为空才会创建对于的敌机。
③GameLayer::gameMaster管理敌机的出现的频率。
④GameController::update管理游戏的碰撞检测。

除了一些数学上的计算比较羞涩意外,整个游戏的逻辑还是比较简单的。。。这里就不细说了,大家直接看源码吧。。。

【玩转cocos2d-x之三十五】Earth Warrior 3D大揭秘相关推荐

  1. SAP UI5 应用开发教程之三十五 - 如何把本地开发的 SAP UI5 应用部署到 ABAP 服务器上试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  2. android相册幻灯片功能,玩机教程 篇四十五:「MIUI玩机技巧63」MIUI相册新增“幻灯片播放”功能...

    玩机教程 篇四十五:「MIUI玩机技巧63」MIUI相册新增"幻灯片播放"功能 2020-02-17 16:15:35 0点赞 0收藏 0评论 本帖主要解决2大问题: 1) 功能科 ...

  3. PX4模块设计之三十五:MulticopterAttitudeControl模块

    PX4模块设计之三十五:MulticopterAttitudeControl模块 1. MulticopterAttitudeControl模块简介 2. 模块入口函数 2.1 主入口mc_att_c ...

  4. BetaFlight模块设计之三十五:RSSI信号强度链路稳定性分析

    BetaFlight模块设计之三十五:RSSI信号强度&链路稳定性分析 1. RSSI信号强度 1.1 RSSI Value 1.2 RSSI dBm Value 2. 链路稳定性 3. RS ...

  5. 软考高级信息系统项目管理师系列之三十五:组织级项目管理

    软考高级信息系统项目管理师系列之三十五:组织级项目管理 一.组织级项目管理内容 二.组织级项目管理概述 三.组织级项目管理对战略的支持 四.组织级项目管理框架内容 五.成熟度模型 组织级项目管理知识包 ...

  6. 非常受用:HP大中华区总裁孙振耀退休十五天后九大感言

    HP大中华区总裁孙振耀退休十五天后九大感言 一.关于工作与生活 我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司40岁附近的经理人是 ...

  7. 小说里的编程 【连载之三十五】元宇宙里月亮弯弯

    第三十五章  金操是不是故意装的 且说,查的机器人,本来是想躲过那些外星人的,但是,殊不知外星人,也是要去看磁控管的.所以查的所有在那里的机器人都无法躲避. 在磁控管的前面,金操一队人和查的机器人相遇 ...

  8. 【转】HP大中华区总裁孙振耀退休十五天后九大感言

    我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司40岁附近的经理人是很尴尬 的.我见过的40岁附近的外企经理人大多在一直跳槽,最后大 ...

  9. [分享]HP大中华区总裁孙振耀退休十五天后九大感言

    文章有点长,需要点耐心.文中提到的一部片子也是我很喜欢的--<The Pursuit of Happyness>,当绝望的时候,唯一需要的就是勇气和拼搏的心,没有幸福从天而降,一切还得靠自 ...

最新文章

  1. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
  2. GIS可视性分析概述
  3. python调用c优缺点_Python调用C模块以及性能分析
  4. spring boot+shiro中使用@RequiresRoles不生效,访问报错404
  5. 从percona server 5.7换到mariadb 10.2
  6. python gRPC测试helloworld
  7. Learning中的代数结构的建立
  8. Matlab多个Figure图合成一个Fig
  9. 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析
  10. [PCB设计] 1、硬件原理图设计规范(一)——基本原则
  11. 全球IPv4地址正式耗尽!
  12. java 线程 回调函数_java 回调函数实现方式
  13. CentOS7 安装 7-zip 压缩工具
  14. Pycharm安装教程 (2022最新版)
  15. 浅谈互联网寒冬与经济形势
  16. 软件架构——系统分析员、系统架构师、项目经理的区别
  17. HTML实战宝典PDF,《selenium webdriver实战宝典》记
  18. mybatis系列一:入门篇
  19. 清明祭扫html5,精选清明节扫墓随笔作文500字5篇
  20. 主板显卡服务器维修,显卡无显示怎么维修 显卡无显示解决方法【详细介绍】...

热门文章

  1. Idea缺少Version Control 底部菜单
  2. SpringBoot_日志-其他日志框架统一转换为slf4j
  3. 设计模式------代理模式
  4. 小学数学加减法测试软件,小学生数学加减测试题
  5. linux拷贝文件到多个目录,怎么在 Linux 中复制文件到多个目录中
  6. php7.2 加载pgsql驱动,PHP启动:无法加载动态库PGSQL - php
  7. stm32定时器中断类型分析
  8. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库...
  9. 浅说《测试用例》----给测试新手的
  10. CCNP学习笔记15-RSTP