我不能在来自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"tile"的属性(来自CCTMXLayer)。例如:
[tile setColor:ccc3(100,100,100)];
) - 我可以为
CCSprite *normalSprite = [CCSprite spriteWithFile:@"Fog.png"];
创建的"正常"精灵启动着色器(CCGLProgram) - 我尝试了cocos2d v2.0.0和cocos2d v2.1.rc2
谢谢你的帮助
"CCTMXLayer使用CCSpriteBatchNode进行渲染,你可以改变这个节点的着色器,但是它将适用于所有的贴图,因为它们使用相同的纹理。
当CCSpriteBatchNode的一部分时,我不认为目前有功能可以修改每个CCSprite的着色器。"
Thanks to cocojoe from: http://www.cocos2d-iphone.org