作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 cocos2d/OpenGLES 的新手,我遇到了一个找不到解决方案的问题。基本上,我想在 CCRenderTexture 中绘制一个抗锯齿圆,然后在多个 Sprite 上使用该纹理。除了抗锯齿部分之外的一切都很简单,但我卡住了,不知道下一步该去哪里。
我现在的代码是:
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 中似乎不起作用。
性能不是什么大问题,因为我只绘制一次纹理并一遍又一遍地重复使用纹理。
最佳答案
在 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"];
然后您可以使用
制作 SpriteCCSprite *circle = [CCSprite spriteWithTexture:[[CCTextureCache sharedTextureCache] textureForKey:@"circleKey"]];
关于ios - 在 CCRenderTexture 中绘制抗锯齿圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443159/
我是一名优秀的程序员,十分优秀!