所以我想在我的一个游戏中尝试一个非常基本的“手电筒”式的东西。
我开始工作的方式是在我的游戏画面上有一个图层,这个图层会绘制一个约80%不透明度的黑色矩形,在我的游戏场景中创建黑暗的外观。
ccDrawSolidRect(ccp(0,0), ccp(480,320), ccc4f(0, 0, 0, 0.8));
我想做的是在屏幕上随处绘制这个矩形,除了围绕一个代表“光源”的视锥外。
除了光线之外,它会在除了光线之外的所有物体上形成一个黑暗的覆盖层,给它一个火炬/灯光/手电筒的幻觉。
我能预见到这种情况的唯一方法是使用ccDrawSolidPoly()
,但由于光源的位置发生变化,因此聚合物的顶点也会发生变化。
有关如何实现这一目标的任何建议都会很棒。
答案 0 :(得分:1)
您可以使用ccDrawSolidPoly()
并避免必须手动更新顶点。为此,您可以创建一个新的CCNode
子类来表示您的灯光对象,并使用-(void)draw
方法进行自定义形状绘制。
ccDraw...()
函数将相对于局部精灵坐标绘制,因此您可以移动并旋转新的精灵以满足您的需要, cocos2d 将为您进行顶点变换。
更新:我发现你可能会更好地继承CCDrawNode
而不是CCNode
,因为它有一些原始OpenGL绘图工具(OpenGL的vertexArrayBuffer和vertexBufferObject内部)变量和顶点的缓冲区,它们的颜色和它们的texCoords)。如果你的东西很简单,也许继承普通CCNode
就足够了。
答案 1 :(得分:0)
可以将png用作掩码,如上面的图层 就像你有时在漫画中看到的那种双眼视觉一样? 或类似于Photoshop屏幕的滤镜,当它向外生长以遮挡屏幕边缘时会变暗
无论如何只是一个想法...
你想要解释的更多内容的图片也可能是好的