0

我无法在来自 CCTMXTiledMap 的 CCSprite 上运行着色器。在互联网上进行了大量研究之后,我开始认为这可能是不可能的,但我没有看到任何关于它的文档或示例......有人已经这样做了吗?如果可能的话,你能告诉我我做错了什么吗?

这里是创建 CCTMXTiledMap 的代码:(我没有任何问题,我的 CCTMXTiledMap 的所有精灵都正确显示)

CCTMXTiledMap *tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"FogTMX.tmx"];
[self addChild:tileMap z:2 tag:666];

这是我为 CCSprite 启动着色器的代码:

CCTMXLayer *layer = [tileMap layerNamed:@"Layer 0"];
CCSprite *tile = [layer tileAt:ccp(10,10)];
const GLchar * fragmentSource = (GLchar*) [[NSString stringWithContentsOfFile:[[CCFileUtils sharedFileUtils] fullPathFromRelativePath:@"CSEAlpha.fsh"] encoding:NSUTF8StringEncoding error:nil] UTF8String];
tile.shaderProgram = [[CCGLProgram alloc] initWithVertexShaderByteArray:ccPositionTextureA8Color_vert fragmentShaderByteArray:fragmentSource];
[tile.shaderProgram addAttribute:kCCAttributeNamePosition index:kCCVertexAttrib_Position];
[tile.shaderProgram addAttribute:kCCAttributeNameTexCoord index:kCCVertexAttrib_TexCoords];
[tile.shaderProgram link];
[tile.shaderProgram updateUniforms];
[tile.shaderProgram use];
  • 我没有任何问题可以更改 CCSprite“平铺”的属性(来自 CCTMXLayer。例如[tile setColor:ccc3(100,100,100)];:)
  • 我可以为使用创建的“正常”精灵启动着色器(CCGLProgram) CCSprite *normalSprite = [CCSprite spriteWithFile:@"Fog.png"];
  • 我用 cocos2d v2.0.0 和 cocos2d v2.1.rc2 试过了

谢谢你的帮助。

4

1 回答 1

0

“CCTMXLayer 使用 CCSpriteBatchNode 进行渲染,您可以更改此节点的着色器,但它将应用于您的所有图块,因为它们使用相同的纹理。

当 CCSpriteBatchNode 的一部分时,我认为目前没有基于每个 CCSprite 修改着色器的功能。”

感谢cocojoe来自: http: //www.cocos2d-iphone.org

于 2013-06-13T06:56:03.253 回答