【转】cocos2d-x 3.2 Fast TileMap

概述

在游戏中常常会有丰富的背景元素,如果直接使用大的背景图实现,这会造成资源浪费。TileMap就是为了解决这问题而产生的。Cocos2d-x支持使用Tile地图编辑器创建的TMX格式的地图。

Cocos2d-x为我们提供了TMXTileMap和TMXLayer两个类来处理瓦片地图。通过使用TMXTileMap和TMXLayer,我们可以很方便的加载TMX格式的地图文件,获取地图上的图层、对象、属性等信息。

新发布的3.2版本,对瓦片地图进行了大幅改进,通过自动裁剪不在视图范围内的瓦片来提升性能,并支持渲染更大尺寸的瓦片地图!我们称之为"Fast TileMap",下面我们就来一起研究Fast TileMap。

TileMap VS Fast TileMap

Fast TileMap的不同

在3.2版本,新增了CCFastTMXTiledMap.h/CCFastTMXTiledMap.cpp/CCFastTMXLayer.h/CCFastTMXLayer.cpp文件用于实现快速高效的瓦片地图功能。

在cocos2d::experimental的名字空间下重新实现了TMXTiledMap和TMXLayer。其中对TMXLayer的改动较大。 TMXLayer不在继承SpriteBatchNode,改为继承Node。并重新实现TileMap的绘制来提升性能。

  • old
class CC_DLL TMXLayer : public SpriteBatchNode
  • new
class CC_DLL TMXLayer : public Node

新的TMXTiledMap接口和原有的保持一致。我们依然可以像以前那样使用TMXTiledMap创建瓦片地图。

Fast TileMap的用法

    auto map = cocos2d::experimental::TMXTiledMap::create("tilemap.tmx");
    addChild(map, 0, kTagTileMap);

上面代码演示了,使用Fast TileMap加载tilemap.tmx文件创建一幅地图,并加到场景中。

更多API使用方法参考:

  • COCOS2DX_ROOT/tests/cpp-tests/Classes/TileMapTest/TileMapTest2.cpp
  • TileMap

性能对比

我们分别使用以前的TileMap和Fast TileMap加载同一个tmx文件创建地图,并在同一设备上进行测试。

测试设备:

MacBook Pro Retina,13-inch,Late 2012 OS X 10.9.4

  • TileMap

      auto map = TMXTiledMap::create("TileMaps/iso-test-bug787.tmx");
      addChild(map, 0, kTagTileMap);
      map->setScale(0.25f);
    

    运行结果:

  • Fast TileMap
      auto map = cocos2d::experimental::TMXTiledMap::create("TileMaps/iso-test-bug787.tmx");
      addChild(map, 0, kTagTileMap);
      map->setScale(0.25f);
    

    运行结果:

    运行结果对比:

  • 两者的GL calls都相同
  • 使用Fast TileMap的GL verts更少
  • 使用Fast TileMap的帧率更高

因为相同的GL calls(渲染次数)下,GL verts(显卡绘制的顶点数)越少,绘制效率越高。FPS(帧率)越高游戏越流畅。所以 使用Fast TileMap渲染地图的性能更优

时间: 2024-10-14 00:39:47

【转】cocos2d-x 3.2 Fast TileMap的相关文章

Fast TileMap

概述 在游戏中常常会有丰富的背景元素,如果直接使用大的背景图实现,这会造成资源浪费.TileMap就是为了解决这问题而产生的.Cocos2d-x支持使用Tile地图编辑器创建的TMX格式的地图. Cocos2d-x为我们提供了TMXTileMap和TMXLayer两个类来处理瓦片地图.通过使用TMXTileMap和TMXLayer,我们可以很方便的加载TMX格式的地图文件,获取地图上的图层.对象.属性等信息. 新发布的3.2版本,对瓦片地图进行了大幅改进,通过自动裁剪不在视图范围内的瓦片来提升性

Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m中新建一个移动方法,内容如下,其中考虑了与地图的碰撞情况: -(void)moveTowardOneTile:(CGPoint)location{ CGPoint diff = ccpSub(location, self.position); CGPoint desiredTileCoord = [

Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法,我们一开始只是想要确保cat在屏幕上正确显示出来,动画正确播放出来,所以可以先不管与地图碰撞检测的问题.于是简化到如下代码: -(void)moveToward:(CGPoint)targetLocation{ CGPoint diff = ccpSub(targetLocation, self.p

Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Sprite.其中CatSprite.h文件如下所示: #import "CCSprite.h" @class MainScene; @interface CatSprite : CCSprite @property (nonatomic,assign,readonly) NSInteger n

屏幕中心(中央)定位到某一瓦片;瓦片地图结尾处修饰

(一)Scrolling the Isometric TilemapWith the tilePosFromLocation method updated to work with isometric tilemaps, theTilemap06 project continues by implementing isometric tilemap scrolling, using the tilecoordinates returned from the tilePosFromLocation

如何优化cocos2d程序的内存使用和程序大小

在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个非常有意义的话题:"请简单地讲述你认为新手cocos2d程序员在他开始编码之前,最应该先知道,或者应该关注和注意的事项."这个问题的答案很多,有人讲是"如何加载和保存游戏数据",有人讲的是"如何实现有限状态机"等等.而最吸引我的则是,有一

Cocos2d:使用 CCCamera 做滚动效果 (Four Ways of Scrolling with Cocos2D)

原文:http://www.koboldtouch.com/display/IDCAR/Four+Ways+of+Scrolling+with+Cocos2D There are two classes of scrolling, "fake" and "real". Altogether there are four ways to create a scrolling view in Cocos2D: with CCCamera, with CCFollow,

【cocos2dx 3.3】TileMap的A*算法实现

总结: cocos里面的Vector比C++的vector容纳的类型少很多,因此用标准库的vector 首先添加点击事件,获取终点的瓦片坐标,并记录下来 设定起始坐标,并将起始坐标作为[当前点] 每次对[当前点]的四周探索,放入优先队列openList 将优先队列的第一个元素,即F值最小的那个点,作为新的[当前点],并放入closeList 继续调用探索方法,直到终点坐标也被放入openList 代码: HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

1.事件描述:CentOS7下使用tree命令,发现该命令没有被安装,在安装的过程中发现yum报错 [[email protected] ~]# tree -d bash: tree: 未找到命令... [[email protected] ~]# yum -y install tree 已加载插件:fastestmirror, langpacks Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast