我无法在来自 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 试过了
谢谢你的帮助。