2

我是 cocos2d / OpenGLES 的新手,我遇到了一个我找不到解决方案的问题。基本上,我想在 CCRenderTexture 中绘制一个抗锯齿圆,然后在多个精灵上使用该纹理。除了抗锯齿部分,一切都很简单,但我被卡住了,不知道下一步该去哪里。

我现在的代码是:

int textureSize = 64;
CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
[rt beginWithClear:spriteColor.r g:spriteColor.g b:spriteColor.b a:0.0f];

ccDrawColor4F(spriteColor.r, spriteColor.g, spriteColor.b, spriteColor.a);
ccDrawCircle(CGPointMake(textureSize / 2.0f, textureSize / 2.0f), textureSize / 2.0f, 0.0f, 360, false);

[rt end];

然而,这导致了一个锯齿状的混乱,我不知道从这里去哪里。我在网上看到过使用点绘制平滑圆的示例,但这似乎在 OpenGLES 2.0 中不起作用。

性能并不是什么大问题,因为我绘制了一次纹理并一遍又一遍地重用纹理。

4

1 回答 1

9

在 Core Graphics 中创建圆形纹理并将其作为 CGImage 添加到纹理缓存中。Core Graphics 自动使用抗锯齿。圆圈将如下所示。

圆圈

示例代码:

//Setup Core Graphics
CGSize circleSize = CGSizeMake(100, 100);
CGPoint circlePosition = ccp(50, 50);
UIGraphicsBeginImageContextWithOptions(size, NO, [[UIScreen mainScreen] scale]);
CGContextRef context = UIGraphicsGetCurrentContext();

//Add the circle to the context and draw it.
CGContextAddArc(context, circlePosition.x, circlePosition.y , circleSize.width/2, 0,2*M_PI,1);
CGContextDrawPath(context,kCGPathStroke);

//Get an image so we can store it in the Texture Cache
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//Add the image to the texture cache
[[CCTextureCache sharedTextureCache] addCGImage:[img CGImage] forKey:@"circleKey"];

然后,您可以使用

CCSprite *circle = [CCSprite spriteWithTexture:[[CCTextureCache sharedTextureCache] textureForKey:@"circleKey"]];
于 2012-09-17T22:19:50.747 回答