Cocos2d平铺地图添加精灵

时间:2010-12-09 03:14:03

标签: cocos2d-iphone z-order

在cocos2d-iphone的等距平铺地图z排序示例中,他们使用已经位于贴图中的对象作为播放器精灵,渲染为在树中移动。

有没有办法使用随机CCNode,通过代码创建(不在tmx文件中,而不是精灵表的一部分),并使用tilemap正确地进行z排序? CCTMXLayer不支持addChild,使用时会出现错误:'addChild: is not supported on CCTMXLayer. Instead use setTileGID:at:/tileAt:'

必须有一种方法可以使用cocos2d的API或某种z-buffer技术正确地使用tilemap来CCNode(简单地说一个简单的CCSprite)z顺序。有什么指针吗?

2 个答案:

答案 0 :(得分:3)

CCTMXLayer不支持在运行时添加切片,因为它是在单个spritesheet上使用所有sprite实现的。由于此实现细节,您也无法在单个磁贴上调用setTexture。

最简单的解决方案是在开头的spritesheet上使用精灵。如果你不能这样做是因为它是在运行时生成的,那么下一个最好的事情(不用触及cocos2d代码)就是修改spritesheet。

将虚拟磁贴放在您用于TMXLayer的spritesheet中,然后,一旦获得要使用的图像,使用CCRenderTexture或其他东西将其写入spritesheet,并使用新生成的Texture作为TMXLayer的纹理。

你也可以修改CCTMXLayer以允许你的功能,但听起来你想避免这种情况。

答案 1 :(得分: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];