2012-09-15 183 views
2

我是cocos2d/OpenGLES的新手,並且遇到了無法找到解決方案的問題。基本上,我想在CCRenderTexture中繪製一個抗鋸齒的圓,然後在多個精靈上使用該紋理。除了抗鋸齒部分以外,其他部分都很簡單,但是我陷入困境,無法弄清楚下一步要去哪裏。在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中似乎不起作用。

性能不是一個問題,因爲我一次繪製紋理並重復使用紋理。

回答

9

在Core Graphics中創建您的圓形紋理,並將其作爲CGImage添加到Texture Cache。 Core Graphics自動使用抗鋸齒。圓圈看起來像這樣。

Circle

示例代碼:

//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"]];