0

我正在使用 coco2d 2.1 构建游戏,目前我开始使用 HKTMXTiledMap 扩展。

总的来说,这个扩展很棒,任何使用平铺地图(尤其是大地图)制作游戏的人都应该检查一下。但我需要能够在我的关卡过程中更改图层的不透明度。

我尝试过更改着色器和绘图方法,但一定有一些我遗漏的东西。

我将 HKTMXLayer.m 的第 97 行更改为: self.shaderProgram = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor];,但随后图层显示为全黑。

有人对我有任何提示吗?谢谢!

4

2 回答 2

0

不确定您的整体上下文,但同一类的绘制方法(第 465 行)仅设置“位置”属性:考虑到该类派生自“CCNode”,这是正常的。

您正在设置的着色器(通常用于精灵)需要一个顶点属性以及一个颜色属性。有关示例,请参见 CCSprite (draw) 中的代码。也许还有另一种方法可以满足您的需求(“为什么”要将 Node 派生类的着色器更改为通常用于 CCSprite/纹理的着色器)。

于 2013-04-02T17:11:28.337 回答
0

修复发布在这里

除了将着色器更改为 之外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.);

glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, NULL);

于 2013-04-06T13:17:41.787 回答