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