【问题标题】:Drawing sprites programatically for sprite kit with alpha channel?以编程方式为带有 alpha 通道的 spritekit 绘制精灵?
【发布时间】:2013-12-18 18:02:17
【问题描述】:

我正在尝试为 sprite kit 制作一个应用程序原型,如果能够以编程方式绘制我现在需要的 sprite,然后再制作实际的 sprite,这对我来说是有利的。我做了一个粗略的圆圈,当我使用 renderInContext 转换为 UIImage(或 CGImage)时,它显示在带有黑色背景的 sprite 视图上,显然忽略了 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];

【问题讨论】:

  • 我没有使用 sprite-kit,但看起来 sprite 视图的 opaque 属性设置为 YES,没有不透明的背景。
  • 成功了,谢谢!如果您将其添加为答案,我会将其标记为已接受。

标签: ios objective-c sprite-kit


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多