2

所以我试图在我的一个游戏中加入一个非常基本的“手电筒”风格的东西。

我让它工作的方式是在我的游戏屏幕顶部有一个图层,这个图层将绘制一个不透明度约为 80% 的黑色矩形,在我的游戏场景顶部创建一个黑暗的外观。

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

我想要做的是在屏幕上的任何地方绘制这个矩形,除了代表“光源”的视锥周围。

这将在除灯光之外的所有东西上形成一个黑色的覆盖层,给人一种手电筒/灯/手电筒的错觉。

我可以预见这种情况的唯一方法是使用ccDrawSolidPoly(),但由于光源的位置发生了变化,多边形的顶点也会发生变化。

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

4

2 回答 2

1

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

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


更新:我发现你可能最好使用子类CCDrawNode而不是CCNode,因为它有一些用于原始 OpenGL 绘图的工具(OpenGL 的 vertexArrayBuffer 和 vertexBufferObject 内部变量以及顶点的缓冲区、它们的颜色和它们的 texCoords)。如果你的东西很简单,也许将平原子类化CCNode就足够了。

于 2013-08-08T09:56:12.473 回答
0

是否可以将 png 用作遮罩,作为上面的图层 就像您有时在卡通中看到的那种双目视觉?或类似于 Photoshop 蒙版的滤镜,当它向外生长到屏幕边缘时会变暗

反正只是一个念头...

您试图解释的更多内容的图片也可能很好

于 2013-08-07T19:51:38.897 回答