2

在 cocos2d-iphone 的等距平铺地图 z-ordering 示例中,他们使用一个已经在平铺地图中的对象作为玩家精灵,它被渲染为在树木中移动。

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

必须有一种方法可以使用 cocos2d 的 API 或一些 z-buffer 技术正确地使用 tilemap进行CCNode(比方说简单的)z-order。CCSprite任何指针?

4

2 回答 2

3

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

最简单的解决方案是在一开始就在 spritesheet 上使用您想要使用的 sprite。如果你不能这样做,因为它是在运行时生成的或者其他什么,下一个最好的事情(不接触 cocos2d 代码)将是修改 spritesheet。

在您用于 TMXLayer 的 spritesheet 中放置一个虚拟平铺,然后,一旦您有了想要使用的图像,使用 CCRenderTexture 或其他东西将其写入 spritesheet,并使用新生成的纹理作为您的 TMXLayer 的纹理。

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

于 2010-12-10T18:48:30.923 回答
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];
于 2013-08-21T04:31:07.347 回答