我正在尝试为 Sprite 套件制作一个应用程序的原型(prototype),如果能够以编程方式绘制我现在需要的 Sprite ,然后再制作实际的 Sprite ,这对我来说是有利的。我做了一个粗略的圆圈,当我使用 renderInContext 转换为 UIImage(或 CGImage)时,它显示在带有黑色背景的 sprite View 上,显然忽略了 alpha channel 。如果我将 UIImage 作为 UIImageView 添加到常规 View ,则 alpha channel 会正确呈现。我想知道我做错了什么,或者是否有解决方法。
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];
最佳答案
当 View 具有 opaque
时,经常会出现这种当您看到黑色 View 背景时的影响。属性错误地设置为 YES
实际上是不透明的(通常在以编程方式创建 View 时发生这种情况,默认为 opaque = YES)。
例如,您可以通过设置 opaque
来解决此问题。至NO
.
关于ios - 以编程方式为带有 alpha channel 的 spritekit 绘制 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665231/