cocos2d学习笔记(六)CCParallaxNode和Tile Map
2013-10-15 00:21
501 查看
如果你的游戏需要更大的场景,你就一定会用到CCParallaxNode或是tile map
我们知道,当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差,而在游戏中模仿视差,可以让玩家感觉到游戏中的角色的确是在移动。CCParallaxNode可以很容易的建立一个视差层,你可以控制每一层的视差率、位置和层级的高低。
[cpp] view
plaincopy
parallaxNode = [CCParallaxNode node]; [parallaxNode
setPosition:ccp(levelSize.width/2.0f,screenSize.height/2.0f)]; float xOffset = 0;
// Ground moves at ratio 1,1
[parallaxNode addChild:BGLayer1 z:40 parallaxRatio:ccp(1.0f,1.0f) positionOffset:ccp(0.0f,0.0f)];
xOffset = (levelSize.width/2) * 0.3f; [parallaxNode addChild:BGLayer2 z:20 parallaxRatio:ccp(0.2f,1.0f)
positionOffset:ccp(xOffset, 0)];
xOffset = (levelSize.width/2) * 0.8f; [parallaxNode addChild:BGLayer3 z:30 parallaxRatio:ccp(0.7f,1.0f)
positionOffset:ccp(xOffset, 0)]; [self addChild:parallaxNode z:10];
我们可以看到z轴为40的视察率最大,20的最小,也就是说,最远的那一层在移动时只有当前层x轴移动速度的0.2倍,y轴速率之所以为1是因为这段代码只是在x轴上进行视差表现。
对了,有个小tip
[cpp] view
plaincopy
id followAction = [CCFollow actionWithTarget:playerCharacter];
[layer runAction:followAction];
CCFollow可以让你的层镜头跟随target,不过这个镜头跟随会包括x轴和y轴
接下来说说tile map,软件下载地址:http://www.mapeditor.org,软件用法就不说了,比较简单,最后会生成.tmx文件,其实这个文件就是一个xml文件
创建对象方法
CCTMXTiledMap *tiledMapWithTMXFile:@"Level2TileMapiPhone.tmx"];
tile map的好处就是无论你的地图多大,内存占用只是每个不同tile的总和,所以使用tile map是非常省内存的一种做法,rpg游戏的地图一般都是用tile map
[cpp] view
plaincopy
CCTMXLayer *groundLayer = [tileMapNode
layerNamed:@"RockBoulderLayer"];
// 2
parallaxNode = [CCParallaxNode node];
[parallaxNode setPosition:
ccp(levelSize.width/2,screenSize.height/2)];
float xOffset = 0.0f;
// 3
xOffset = (levelSize.width/2);
[groundLayer retain];
[groundLayer removeFromParentAndCleanup:NO];
[groundLayer setAnchorPoint:CGPointMake(0.5f, 0.5f)];
[parallaxNode addChild:groundLayer z:30 parallaxRatio:ccp(1,1)
positionOffset:ccp(0,0)];
[groundLayer release];
如上代码,如果tile map中有多个层,把这些层加入其他对象中时一定要先retain,然后从tileMapNode中remove,然后在进行加入操作,之后别忘了release一下,这样让他当前的持有者把控他的生命周期
ok,就是这些,下个博客开始写物理引擎box2d!
我们知道,当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差,而在游戏中模仿视差,可以让玩家感觉到游戏中的角色的确是在移动。CCParallaxNode可以很容易的建立一个视差层,你可以控制每一层的视差率、位置和层级的高低。
[cpp] view
plaincopy
parallaxNode = [CCParallaxNode node]; [parallaxNode
setPosition:ccp(levelSize.width/2.0f,screenSize.height/2.0f)]; float xOffset = 0;
// Ground moves at ratio 1,1
[parallaxNode addChild:BGLayer1 z:40 parallaxRatio:ccp(1.0f,1.0f) positionOffset:ccp(0.0f,0.0f)];
xOffset = (levelSize.width/2) * 0.3f; [parallaxNode addChild:BGLayer2 z:20 parallaxRatio:ccp(0.2f,1.0f)
positionOffset:ccp(xOffset, 0)];
xOffset = (levelSize.width/2) * 0.8f; [parallaxNode addChild:BGLayer3 z:30 parallaxRatio:ccp(0.7f,1.0f)
positionOffset:ccp(xOffset, 0)]; [self addChild:parallaxNode z:10];
我们可以看到z轴为40的视察率最大,20的最小,也就是说,最远的那一层在移动时只有当前层x轴移动速度的0.2倍,y轴速率之所以为1是因为这段代码只是在x轴上进行视差表现。
对了,有个小tip
[cpp] view
plaincopy
id followAction = [CCFollow actionWithTarget:playerCharacter];
[layer runAction:followAction];
CCFollow可以让你的层镜头跟随target,不过这个镜头跟随会包括x轴和y轴
接下来说说tile map,软件下载地址:http://www.mapeditor.org,软件用法就不说了,比较简单,最后会生成.tmx文件,其实这个文件就是一个xml文件
创建对象方法
CCTMXTiledMap *tiledMapWithTMXFile:@"Level2TileMapiPhone.tmx"];
tile map的好处就是无论你的地图多大,内存占用只是每个不同tile的总和,所以使用tile map是非常省内存的一种做法,rpg游戏的地图一般都是用tile map
[cpp] view
plaincopy
CCTMXLayer *groundLayer = [tileMapNode
layerNamed:@"RockBoulderLayer"];
// 2
parallaxNode = [CCParallaxNode node];
[parallaxNode setPosition:
ccp(levelSize.width/2,screenSize.height/2)];
float xOffset = 0.0f;
// 3
xOffset = (levelSize.width/2);
[groundLayer retain];
[groundLayer removeFromParentAndCleanup:NO];
[groundLayer setAnchorPoint:CGPointMake(0.5f, 0.5f)];
[parallaxNode addChild:groundLayer z:30 parallaxRatio:ccp(1,1)
positionOffset:ccp(0,0)];
[groundLayer release];
如上代码,如果tile map中有多个层,把这些层加入其他对象中时一定要先retain,然后从tileMapNode中remove,然后在进行加入操作,之后别忘了release一下,这样让他当前的持有者把控他的生命周期
ok,就是这些,下个博客开始写物理引擎box2d!
相关文章推荐
- cocos2d学习笔记(六)CCParallaxNode和Tile Map
- Cocos2d-x学习笔记(三)CCNode分析
- cocos2d-x 学习笔记之CCNode
- Cocos2d-x学习笔记(三)CCNode分析
- cocos2d-x学习笔记-CCMenu和CCMenuItem详解
- 我的Cocos2d-x学习笔记(十三)CCLabelTTF、CCLabelAtlas、CCLabelBMFont
- IOS cocos2d学习笔记-<六>CCParticalSystem粒子效果
- CCLayerColor和CCClippingNode组合新手引导功能---cocos2d-x学习之路[4]
- cocos2d-x学习笔记3:CCTextFieldTTF的使用和再封装
- cocos2d-x学习笔记:SpriteBatchNode
- Cocos2d-x学习笔记(十四)CCAutoreleasePool具体解释
- 我的Cocos2d-x学习笔记(十五)CCControlSlider、CCControlSwitch、CCScale9Sprite、CCControlButton
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray)
- Cocos2d-x学习笔记(七)CCAction原理分析
- cocos2d-x学习笔记-CCMenu和CCMenuItem详解
- Cocos2d-x学习笔记(14)(更新函数scheduleUpdate、进度计时器CCProgressTo、滚动视图CCScrollView)
- cocos2d CCParallaxNode
- cocos2d-x学习笔记(14)--CCTextureCache
- cocos2d学习之CCNode
- Cocos2d-x学习笔记(二十八)之 滚动列表类CCListView