刚刚完成“伞公主”的制作,其中背景地图的加载是一个很有难度的工作。为了完成这项任务我做了大量的工作,不能说非常全面至少应该有一些有用的经验,所以想总结下来,以备后用。特别是背景的移动
加载地图的方法:
1 。精灵+CCParallaxNode 具体参考:http://www.cnblogs.com/andyque/archive/2011/06/09/2074962.html
第一步建立ccpareallaxnode
在。h文件里面
CCParallaxNode *_backgroundNode;
在。m文件里面
// 1) Create the CCParallaxNode
_backgroundNode = [CCParallaxNode node];
[self addChild:_backgroundNode z:-1];
_planetsunrise = [CCSprite spriteWithFile:@"bg_planetsunrise.png"];
_galaxy = [CCSprite spriteWithFile:@"bg_galaxy.png"];
_spacialanomaly = [CCSprite spriteWithFile:@"bg_spacialanomaly.png"];
_spacialanomaly2 = [CCSprite spriteWithFile:@"bg_spacialanomaly2.png"];
第二步 声明背景精灵对象 比如:
// 2) Create the sprites we'll add to the CCParallaxNode
_spacedust1 = [CCSprite spriteWithFile:@"bg_front_spacedust.png"];
_spacedust2 = [CCSprite spriteWithFile:@"bg_front_spacedust.png"];
第三步 定义精灵相对的移动速度。
// 3) Determine relative movement speeds for space dust and background
CGPoint dustSpeed = ccp(0.1, 0.1);
CGPoint bgSpeed = ccp(0.05, 0.05);
第四步 将精灵对象加入到ccparallaxnode中
// 4) Add children to CCParallaxNode
[_backgroundNode addChild:_spacedust1 z:0 parallaxRatio:dustSpeed positionOffset:ccp(0,winSize.height/2)];
[_backgroundNode addChild:_spacedust2 z:0 parallaxRatio:dustSpeed positionOffset:ccp(_spacedust1.contentSize.width,winSize.height/2)];
[_backgroundNode addChild:_galaxy z:-1 parallaxRatio:bgSpeed positionOffset:ccp(0,winSize.height *0.7)];
[_backgroundNode addChild:_planetsunrise z:-1 parallaxRatio:bgSpeed positionOffset:ccp(600,winSize.height *0)];
[_backgroundNode addChild:_spacialanomaly z:-1 parallaxRatio:bgSpeed positionOffset:ccp(900,winSize.height *0.3)];
[_backgroundNode addChild:_spacialanomaly2 z:-1 parallaxRatio:bgSpeed positionOffset:ccp(1500,winSize.height *0.9)];
第五步 让背景移动 。
如果背景移动是在update方法中添加的,那么在init方法里面添加 [self scheduleUpdate]; 如果背景移动在其他的方法中实现,例如在update background中实现,那么需要在init方法中添加
[self schedule:@selector(updatebackground:) interval:0.01];//处理背景移动
在update或者updatebackground中添加如下的语句
CGPoint backgroundScrollVel = ccp(-1000, 0);
_backgroundNode.position = ccpAdd(_backgroundNode.position, ccpMult(backgroundScrollVel, dt));
注意:可以使用多个parraxnode,使用方法相似。
第六步 背景连续滚动。
具体解决办法在子龙山人的博客里面这里不再赘述,http://www.cnblogs.com/andyque/archive/2011/06/09/2074962.html
2 使用titlemap加载背景,具体参考:http://www.cnblogs.com/andyque/archive/2011/04/11/2012852.html。这种方法适合制作那些有固定大小的地图,而且地图是使用很多小的元素重复来组成的,例如坦克大战等游戏。
第一步下载tile地图编译器