我正在用coco2d 2.1构建游戏,目前我开始使用HKTMXTiledMap扩展。
总的来说,扩展性非常好,任何使用平铺地图(特别是大型地图)制作游戏的人都应该检查一下。但是我需要能够在我的关卡过程中改变图层的不透明度。
我尝试更改着色器和绘图方法,但必须有一些我不知道的东西。
我将HKTMXLayer.m的第97行更改为:self.shaderProgram = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor];
,但随后该图层全部显示为黑色。
有人给我任何提示吗?谢谢!
答案 0 :(得分:0)
不确定你的整体上下文,但是同一类的绘制方法(第465行)只是设置'position'属性:考虑到类派生自'CCNode',这是正常的。
您正在设置的着色器(通常用于精灵)需要顶点属性以及颜色属性。有关示例,请参阅CCSprite(draw)中的代码。也许还有另一种方法可以满足您的需求('为什么'您要将Node衍生类的着色器更改为通常用于CCSprite /纹理的着色器)。
答案 1 :(得分:0)
修复程序已发布here。
在将着色器更改为kCCShader_PositionTextureColor
的同时,绘制图层时需要传递颜色属性。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glVertexAttrib4f(kCCVertexAttrib_Color, color_.r/255., color_.g/255., color_.b/255., opacity_/255.);
glVertexAttrib4f(kCCVertexAttrib_Color, color_.r/255., color_.g/255., color_.b/255., opacity_/255.);