2013-12-18 76 views
1

我想为sprite工具包创建一个应用的原型,并且对于我现在能够以编程方式绘制我需要的sprite,然后再制作实际的sprite,对我来说是有利的。我做了一个粗略的循环,当我使用renderInContext转换为UIImage(或CGImage)时,它显示在具有黑色背景的sprite视图上,显然忽略了alpha通道。如果我将UIImage作为UIImageView添加到常规视图,则Alpha通道将正确呈现。我想知道我做错了什么,或者如果这是一个解决方法。以alpha通道为精灵套件以图形方式绘制精灵图形?

float rockSize = 100; 

UIView* drawingView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)]; 
drawingView.backgroundColor = [UIColor clearColor]; 

CALayer* circleLayer = [CALayer layer]; 
circleLayer.frame = CGRectMake(0,0,rockSize,rockSize); 
circleLayer.backgroundColor = [Utils getTiledColorFromColor:[UIColor purpleColor]].CGColor; 
circleLayer.cornerRadius = rockSize/2.0; 
circleLayer.masksToBounds = YES; 

[drawingView.layer addSublayer:circleLayer]; 

UIGraphicsBeginImageContextWithOptions(CGSizeMake(rockSize, rockSize), NO, [UIScreen mainScreen].scale); 
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), [UIColor clearColor].CGColor); 
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0,0,rockSize,rockSize)); 
[drawingView.layer renderInContext: UIGraphicsGetCurrentContext()]; 

UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

SKSpriteNode *rockNode = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImage:layerImage]]; 
CGPoint position = CGPointMake(200,100); 
rockNode.position = position; 

[self addChild:rockNode]; 
+2

我还没有使用sprite-kit,但它看起来像sprite视图有不透明的背景设置为YES的不透明属性。 – yurish

+0

这样做,谢谢!如果您将其添加为答案,我会将其标记为已接受。 – DivideByZer0

回答

3

这样当看到黑色视图背景的影响经常发生当视图具有opaque属性错误地设置为YES而不实际不透明(通常发生这种情况是编程方式创建视图时,不透明= YES是默认值)。

您可以通过将opaque设置为NO来解决此问题。