Cocos2d-x特殊节点对象(瓦片地图、粒子系统、视差滚动)概述

  除了LabelSprite这些基本的节点对象外,Cocos2d-x还提供了一些特殊的节点对象,来帮助构造建一些高级功能。

  也许你想制作一个基于瓦片地图的游戏,也许你想添加粒子效果,也许你想在游戏中添加一个2D滚动的边栏,别担心,这些特殊的节点对象能帮助你。

瓦片地图

  在游戏开发过程中,我们会遇到超过屏幕大小的地图,例如在即时战略游戏中,它使得玩家在地图中滚动游戏画面。这些游戏通常会有丰富的背景元素,如果直接使用背景切换的方式,需要为每个不同的场景准备一张背景图,而且每个背景图都不小,这样会造成资源浪费。

  瓦片地图就是为了解决这个问题而产生的。一张大的世界地图或者背景图可以由几种地形来表示,每种地形对应一张小的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼凑在一起,一个完成的地图就组合出来了,这就是瓦片地图的原理。

  在Cocos2d-x中,瓦片地图实现的是TileMap方案,TileMap要求每个瓦片占据地图上一个四边形或者六边形的区域。把不同的瓦片拼接在一起,就可以组成完成的地图。TileMap使用一种基于XML的TMX格式文件。

  使用TMX文件创建一个瓦片地图:

//读取瓦片地图
auto map = TMXTiledMap::create("TileMap.tmx");
this->addChild(map,0,99);//tag值为99

  瓦片地图可能有许多层,通过层名获取一个特定的层。

//如何获得特定的层
auto map = TMXTiledMap::create("TileMap.tmx");
auto layer = map->getLayer("Layer0");
auto tile = layer->getTileAt(Vec2(1,63));//通过位置坐标获取该层上面的某个精灵对象

  每个瓦片都有独一无二的位置和ID,这使得我们很容易选择特定的瓦片。

  通过位置访问:

//获取具体的瓦片ID
unsigned int gid = layer->getTileGIDAt(Vec2(0,63));

  瓦片地图布局示例:

  有很多工具可以用来制作瓦片地图,Tiled就是一种一款流行的制作工具,它有一个活跃的用户社区。上面的两张图就来自于Tiled的项目。

粒子系统

  粒子系统是指计算机图形学中特定现象的技术,它在模拟自然现象、物理现象及空间扭曲上具备得天独厚的优势,能为我们实现一些真实而又带有随机性的效果(如爆炸、烟花、水流)提供了方便。Cocos2d-x引擎中就为我们提供了强大的粒子系统。

  下面是使用粒子系统完成的两个粒子特效:

创建粒子特效的工具

  尽管你能手动创建粒子特效,按照喜好确定每个属性,但是使用工具往往更方便高效。下面介绍几个第三方工具:

  1. Particle Designer:Mac上一款非常强大的粒子特效编辑器
  2. V-play particle editor:一款跨平台的粒子特效编辑器
  3. Particle2dx:一款web粒子特效编辑器,打开网页即可进行设计。

  使用这些工具完成粒子特效的设计,最终会导出一个*.plist*文件,Cocos2d-x通过使用这种文件,就能把粒子特效添加到场景中,添加方法和操作一个普通的节点类型一样。

  创建方法:

//通过plist文件创建
auto particleSystem = ParticleSystem::create("SpinningPeas.plist");

内置粒子特效

  准备好添加粒子特效到你的游戏中了吗?是否习惯创建自定义粒子特效?不习惯也没关系,我们内置了一些粒子特效,可以直接使用。这些列表都是(以下粒子特效均使用重力模式且是点粒子系统):

  • ParticleFire
  • ParticleFireworks
  • ParticleSun
  • ParticleGalaxy
  • ParticleFlower
  • ParticleMeteor
  • ParticleSpiral
  • ParticleExplosion
  • ParticleSmoke
  • ParticleSnow
  • ParticleRain

  比如使用内置的烟火特效ParticleFireworks:

auto emitter = ParticleFireworks::create();this->addChild(emitter,10);

  是这样的效果:

  要是内置的粒子特效不是我们所需要的那样,也没关系,可以直接手动设置参数!让我们拿上面的烟火特效示例,并通过手动改变属性进一步控制。

![设置属性后的烟火例子系统](C:\Users\13559\Desktop\设置属性后的烟火例子系统.gif)![设置属性后的烟火例子系统](D:\ak_source\cocos2d-x V3.17.2\官网\4 特殊节点对象\设置属性后的烟火例子系统.gif)![设置属性后的烟火例子系统](D:\ak_source\cocos2d-x V3.17.2\官网\4 特殊节点对象\设置属性后的烟火例子系统.gif)auto emitter = ParticleFireworks::create();//设置持续时间
emitter->setDuration(ParticleSystem::DURATION_INFINITY);//半径模式
emitter->setEmitterMode(ParticleSystem::Mode::RADIUS);//半径模式:中心100px
emitter->setStartRadius(100);
emitter->setStartRadiusVar(0);
emitter->setEndRadius(ParticleSystem::START_RADIUS_EQUAL_TO_END_RADIUS);
emitter->setEndRadiusVar(0);

视差滚动

  • 什么是视差滚动?

    • 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验。
  • 视差滚动的规则

    越远的层移动的速度越慢,越近的层移动速度越快。

    • 背景层的滚动最慢
    • 贴图层的滚动次慢
    • 内容层的滚动可以和页面的滚动速度一致

  视差滚动是指让多层背景以不同速度移动,从而形成的立体运动效果。比如超级马里奥游戏中,角色所在地面的移动与背景天空的移动,就是一个视差滚动。Cocos2d-x通过ParallaxNode对象模拟视差滚动。可以通过序列控制移动,也可以通过监听鼠标,触摸,加速度计,键盘等事件控制移动。ParallaxNode对象比常规节点对象复杂一些,因为为了呈现不同的移动速度,需要多个子节点。它类似Menu像一个容器,本身不移动,移动的是被添加进入其中的不同子节点。ParallaxNode的创建:

//创建ParallaxNode
auto paraNode = ParallaxNode::create();

  添加多个节点对象:

//创建ParallaxNode
auto paraNode = ParallaxNode::create();//背景图片以x坐标为0.4,y坐标为0.5的速率移动
paraNode->addChild(background,-1,Vec2(0.4f,0.5f),Vec2::ZERO);//瓦片以x坐标为2.2,y坐标为1.0的速率移动
paraNode->addChild(middle_layer,1,Vec2(2.2f,1.0f),Vec2(0,-200));//顶部图片以x坐标为3.0,y坐标为2.5的速率移动
paraNode->addChild(top_layer,2,Vec2(3.0f,2.5f),Vec2(200,800));

  需要注意的是,被添加的每个Node对象被赋予了一个唯一的z-order顺序,以便他们堆叠在彼此之上。另外要注意addChild()调用中两个Vec2参数,第一个决定这个子节点的移动速度与父节点的移动速度的比率,第二个是相对父节点ParallexNode的偏移量。

Cocos2d-x特殊节点对象(瓦片地图、粒子系统、视差滚动)概述相关推荐

  1. Tilemap瓦片地图

    可以用Tilemap工具来构建游戏世界的地图,创建瓦片地图时,Grid组件自动作为瓦片地图的父级,相比于传统使用照片搭建地图的方式,使用瓦片地图用来搭建地图可以更加迅速,而且使用传统方式搭建地图时,需 ...

  2. 12.Unity2D 横版 TileMap随机生成简易横版瓦片地图+随机生成环境(花草树石)精灵图+2d-extras+协程的应用

    量过大 总目录 本教程涉及协程,如果不懂协程请点击上方总目录6,7节课查看协程 为什么要用携程呢?因为协程可以使得整个函数在过程运行,而不用一帧中完成所有的函数,不然只得计算量过大,让机器卡住.  开 ...

  3. 【Cocosd2d实例教程三】Cocos2d瓦片地图的导入

    (转载请注明出处:http://blog.csdn.net/buptgshengod)    上一节讲了如何使用Tiled制作瓦片地图,下面讲一下如何将地图导入游戏中.     第一步:将生成的文件导 ...

  4. tiled素材_瓦片地图 Tiled Map

    瓦片地图(Tiled Map) 瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏是角色扮演游戏, 平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源 ...

  5. Tiled 瓦片地图

    glory原创,首发于泰然,转载请注明出处 https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/t ...

  6. 瓦片地图 cocos

    [前言] 还记得我们小时候玩的小霸王里面的游戏吗?大部分都是基于Tile地图的游戏,如坦克大战.冒险岛.魂斗罗.吞食天地等.而在手游中,基于瓦片地图的游戏也很常见.如:<保卫萝卜>. 瓦片 ...

  7. 转:瓦片地图TiledMap

    标签:tiledMap 3.x cocos tmx tile 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://shahdza.bl ...

  8. Tiled瓦片地图的使用

    Tiled软件使用的注意事项: 1️⃣文件的导入.图层文件的导入不能有中文名字,最好是先把需要的资源文件导入到工程的Resource文件夹中,让后到这个文件夹中导入Tiled软件,进行瓦片地图的绘制. ...

  9. Tiled Map(瓦片地图)

    Tiled Map(瓦片地图) Legendof19912014-06-12 14:57:28383 次阅读 Tiled Map(瓦片地图)编辑器的使用,详见:http://blog.csdn.net ...

  10. Cocos2d-x 3.x基础学习:瓦片地图TiledMap

    有谁还记得小时候玩的小霸王里的游戏?比如坦克大战.冒险岛.魂斗罗.吞食天地等,他们大部分都是基于Tile地图的游戏.但在手游中,基于瓦片地图的游戏很常见.如:<保卫萝卜>. 瓦片地图有专门 ...

最新文章

  1. CentOS6.8下安装MySQL5.5数据库
  2. win10 无法打开 APICloud Studio 2 的解决方案
  3. 编程实现WCF客户端调用
  4. 【Android工具】speedtest网速测试工具(4.1.5)安卓网速测试去广告高级版
  5. Spring Boot JdbcTemplate 入门
  6. MPU6050首例整合性6轴的姿态模块(转)
  7. 解决 GStreamer 遇到了常规流错误问题
  8. Boost.MultiIndex 使用随机访问索引的示例
  9. createTemporaryView is deprecated
  10. maven,gradle本地缓存位置
  11. P2678 [NOIP2015 提高组] 跳石头
  12. 【实验4】——互谱法测向
  13. totalspider爬虫批量重启报错Connection Error
  14. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1
  15. 14. Floyd + 朴素版Dijkstra
  16. 什么是UL2809认证?
  17. 场景分析法设计测试用例
  18. Qt生成exe错误:无法定位程序输入点_cxa_throw_bad_array_new_length于动态链接库最终解决方法
  19. python可以用保留字作为函数的名字吗_Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义...
  20. wsappx把电脑卡爆了解决办法

热门文章

  1. 大神带你实现 NLP 从入门到获奖,还有免费算力可以薅
  2. 每日算法系列【LeetCode 115】不同的子序列
  3. 机器学习9-案例1:银行营销策略分析
  4. 《Java程序员职场全攻略:从小工到专家》连载十:这条路大家都是怎么走的
  5. 免费讲座:从草根到巨人——互联网时代的LAMP开源架构
  6. 外籍专家在中关村图书大厦解密软件项目
  7. 推荐系统:非个性化推荐Non-personalized recommendation
  8. spring 处理带有特殊字符的请求_Spring爸爸又给Spring MVC生了个弟弟叫Spring WebFlux...
  9. 使用std:sort和Eigen根据矩阵某一行/列元素对矩阵的行/列排序
  10. go mysql recover_Go基础系列:defer、panic和recover