瓦片地图
在游戏开发过程中,我们会遇到超过屏幕大小的地图,这类游戏通常会有丰富的背景元素,如果直接使用背景图切换的方式,需要为每个不同的场景准备一张背景图,而且每个背景图都不小,这样会造成资源浪费。
瓦片地图就是为了解决这个问题而产生的。一张大的世界地图或者背景图可以由几中地形来表示,每种地形对应一张小的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。
在 Cocos2d-x 中,瓦片地图实现的是 TileMap 方案,TileMap 要求每个瓦片占据地图上一个四边形或六边形的区域。把不同的瓦片拼接在一起,就可以组成完整的地图。TileMap 使用一种基于 XML 的 TMX 格式文件。
// reading in a tiled map.
auto map = TMXTiledMap::create("TileMap.tmx");
addChild(map, 0, 99); // with a tag of '99'
瓦片地图可能有很多层,通过层名获取到一个特定的层。
// how to get a specific layer
auto map = TMXTiledMap::create("TileMap.tmx");
auto layer = map->getLayer("Layer0");
auto tile = layer->getTileAt(Vec2(1, 63));
每个瓦片都有独一无二的位置和ID,这使我们可以很容易选择特定的瓦片。
// to obtain a specific tiles id
unsigned int gid = layer->getTileGIDAt(Vec2(0, 63));
粒子系统
粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势,能为我们实现一些真实自然而又带有随机性的效果。
使用工具可以完成粒子特效的设计,最终会导出一个.plist文件。
// create by plist file
auto particleSystem = ParticleSystem::create("SpinningPeas.plist");
视差滚动
视差滚动是指让多层背景以不同的速度移动,从而形成的立体运动效果。通过ParallaxNode对象模拟视差滚动,它类似Menu像一个容器,本身不移动,移动的是被添加进入其中的不同子节点。
// create ParallaxNode
auto paraNode = ParallaxNode::create();
// create ParallaxNode
auto paraNode = ParallaxNode::create();
// background image is moved at a ratio of 0.4x, 0.5y
paraNode->addChild(background, -1, Vec2(0.4f,0.5f), Vec2::ZERO);
// tiles are moved at a ratio of 2.2x, 1.0y
paraNode->addChild(middle_layer, 1, Vec2(2.2f,1.0f), Vec2(0,-200) );
// top image is moved at a ratio of 3.0x, 2.5y
paraNode->addChild(top layer, 2, Vec2(3.0f,2.5f), Vec2(200,800) );
需要注意的是,被添加的每个Node对象被赋予了一个唯一的z-order顺序,以便他们堆叠在彼此之上。另外需要注意addChild()调用中两个Vec2参数,第一个决定这个子节点的移动速度与父节点移动速度的比率,第二个是相对父节点ParallaxNode的偏移量。
最后欢迎大家访问我的个人网站:1024s