在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顺序。有什么指针吗?
答案 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];