以编程方式为sprite工具包绘制精灵与alpha通道?

时间:2013-12-18 18:02:18

标签: ios objective-c sprite-kit

我正在尝试为sprite工具包创建一个应用程序的原型,我现在可以以编程方式绘制精灵,然后再制作实际精灵对我有利。我做了一个粗略的循环,当我使用renderInContext转换为UIImage(或CGImage)时,它显示在带有黑色背景的精灵视图上,显然忽略了alpha通道。如果我将UIImage作为UIImageView添加到常规视图中,则会正确呈现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];

1 个答案:

答案 0 :(得分:3)

如果视图的opaque属性设置错误地设置为YES而实际上不透明(通常会在以编程方式创建视图时发生这种情况,opaque = YES),则会出现这种影响是默认的。)

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