CCDRAW。除精灵外,到处填充屏幕

时间:2013-08-07 09:44:56

标签: ios objective-c opengl-es cocos2d-iphone

所以我想在我的一个游戏中尝试一个非常基本的“手电筒”式的东西。

我开始工作的方式是在我的游戏画面上有一个图层,这个图层会绘制一个约80%不透明度的黑色矩形,在我的游戏场景中创建黑暗的外观。

ccDrawSolidRect(ccp(0,0), ccp(480,320), ccc4f(0, 0, 0, 0.8));

我想做的是在屏幕上随处绘制这个矩形,除了围绕一个代表“光源”的视锥外。

除了光线之外,它会在除了光线之外的所有物体上形成一个黑暗的覆盖层,给它一个火炬/灯光/手电筒的幻觉。

我能预见到这种情况的唯一方法是使用ccDrawSolidPoly(),但由于光源的位置发生变化,因此聚合物的顶点也会发生变化。

有关如何实现这一目标的任何建议都会很棒。

2 个答案:

答案 0 :(得分:1)

您可以使用ccDrawSolidPoly()并避免必须手动更新顶点。为此,您可以创建一个新的CCNode子类来表示您的灯光对象,并使用-(void)draw方法进行自定义形状绘制。

ccDraw...()函数将相对于局部精灵坐标绘制,因此您可以移动并旋转新的精灵以满足您的需要, cocos2d 将为您进行顶点变换。


更新:我发现你可能会更好地继承CCDrawNode而不是CCNode,因为它有一些原始OpenGL绘图工具(OpenGL的vertexArrayBuffer和vertexBufferObject内部)变量和顶点的缓冲区,它们的颜色和它们的texCoords)。如果你的东西很简单,也许继承普通CCNode就足够了。

答案 1 :(得分:0)

可以将png用作掩码,如上面的图层 就像你有时在漫画中看到的那种双眼视觉一样? 或类似于Photoshop屏幕的滤镜,当它向外生长以遮挡屏幕边缘时会变暗

无论如何只是一个想法...

你想要解释的更多内容的图片也可能是好的