如果你的遊戲需要更大的情境,你就一定會用到CCParallaxNode或是tile map
我們知道,當我們移動時,我們會看到離我們越近的物體,會移動的越快,越遠的物體,比如遠處的山會移動的很慢,而最遠處的物體,比如太陽幾乎不動,這個現象叫視差,而在遊戲中模仿視差,可以讓玩家感覺到遊戲中的角色的確是在移動。CCParallaxNode可以很容易的建立一個視差層,你可以控制每一層的視差率、位置和層級的高低。
parallaxNode = [CCParallaxNode node]; [parallaxNodesetPosition: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
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
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!