是否可以从来自CCT Tiled Map的CCsprite运行着色器(CGProgram)

时间:2013-06-11 21:03:56

标签: ios cocos2d-iphone shader tiles ccsprite

我无法在来自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
  • 试了一下

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

我不认为当CCSpriteBatchNode的一部分时,目前有功能在每个CCSprite的基础上修改着色器。“

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

cocojoe