2010-12-09 83 views
2

在等距平鋪地圖z-ordering的cocos2d-iphone示例中,他們使用已經在地圖上的對象作爲玩家精靈,渲染爲在樹中移動。Cocos2d平鋪地圖添加精靈

有沒有辦法使用通過代碼創建的隨機CCNode(不在tmx文件中,並且不是精靈表的一部分),並使用tilemap對z進行正確排序? CCTMXLayer不支持addChild,並且在使用該讀取時出現錯誤:'addChild: is not supported on CCTMXLayer. Instead use setTileGID:at:/tileAt:'

有一種方法可以使用cocos2d的API或某種z緩衝技術,正確地使用tilemap生成CCNode(假設一個簡單的CCSprite)z順序。任何指針?

回答

3

CCTMXLayer不支持在運行時添加切片,因爲它是在單個spritesheet上使用所有精靈來實現的。由於此實現細節,您也無法在單個圖塊上調用setTexture。

最簡單的解決方案是在開始時在spritesheet上使用sprite。如果你不能這樣做,因爲它是在運行時或其他東西中生成的,那麼下一個最好的事情(不要觸及cocos2d代碼)就是修改spritesheet。

在您用於TMXLayer的spritesheet中放入一個虛擬磁貼,然後,一旦您有要使用的圖像,請使用CCRenderTexture或其他東西將它寫入spritesheet,並使用新生成的Texture作爲TMXLayer的紋理。

您也可以修改CCTMXLayer以允許您的功能,但聽起來好像要避免這種情況。

3

如果你想(在瓷磚地圖編輯器座標(X,Y))添加一個互動說瓦(X,Y),然後使用下面的代碼 -

myTileMap是參考CCTMXTiledMap對象。

CCTMXLayer *layer=[myTileMap layerNamed:@"yourlayer"]; 
NSAssert(floorLayer !=nil, @"Ground layer not found!");  
CGPoint tileAddPosition = [layer positionAt: CGPointMake(x,y)]; 

//Create your CCNode or CCSprite or whatever...say object name is **tileToBeAdded** 

tileToBeAdded.anchorPoint = CGPointZero; 
tileToBeAdded.position = tileAddPosition; 
[myTileMap addChild:addedTile z:1];