2013-12-18 77 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來解決此問題。