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でやってみた
助けてくれてありがとう。