1

我正在使用 cocos2d 2.0 制作基于路径的游戏,它将为玩家随机生成路径(曲率)。该路径是使用 box2d 的 b2EdgeShape 创建的。我想在该路径下方放置一个精灵,我采取的路线是这样的:

  • 显示在路径下方的精灵将不断重复,其高度总是大于路径的高度(视差背景)

  • 使用 CCRenderTexture 的白色精灵将完全适合路径下方(我真正的问题

  • 片段着色器会将白色精灵的 alpha 值与我必须显示的精灵进行比较,并将这两个值相乘。对于必须显示精灵的每个像素,乘法后的 alpha 值将为 1,希望我能达到我想要的效果。

如何使那个白色精灵完全适合使用 CCRenderTexture 创建的路径下方。我尝试遵循 RayWenderlich 上的 Tiny Wings 教程,但该教程基于 OpenGL ES 1.1,并且有一些我无法移植到 OpenGL 2.0 的固定管道函数(我对 OpenGL 的了解很少。)我宁愿使用cocos2d 2.0 有 OpenGL 2.0。我已经使用静态白色精灵在片段着色器上工作,如果我可以不断地在路径下方获得白色,这种方法可以工作。有人可以指出我正确的方向吗?任何帮助,将不胜感激 :)

4

1 回答 1

1

如果白色精灵只是一个 alpha 蒙版,则不需要这样做。Follow's Ray 的例子,我认为你需要改变的是:

在您的 -init 中:

// Built-in to Cocos2D v2.0
[self setShaderProgram: [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTexture]];

... Generate _hillVertices and _hillTexCoords as Ray does ...

在你的 -draw 中:

// Built-in to Cocos2D v2.0
[[self shaderProgram] use];
[[self shaderProgram] setUniformForModelViewProjectionMatrix];

// vertex data (glVertexPointer is depreciated)
glEnableVertexAttribArray ( kCCVertexAttrib_Position );
glVertexAttribPointer ( kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, _hillVertices );

// texture data (glTexCoordPointer is depreciated)
glEnableVertexAttribArray ( kCCVertexAttrib_TexCoords );
glVertexAttribPointer ( kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, _hillTexCoords );

glDrawArrays ( GL_TRIANGLE_STRIP, 0, (GLsizei)_nHillVertices );

我有一个类似的工作实现(我使用了顶点和颜色坐标,没有纹理),所以我实际上并没有编译上面的代码。Cocos2d v2.0 内置着色器,用于使用带纹理的顶点、带颜色的顶点、带纹理和颜色的顶点等。只需在 setShaderProgram 时选择适当的 kCCShader_* 键并提供正确的数据。

于 2013-02-22T23:00:10.477 回答