2013-12-16 10 views
11

スプライトキットSKCropNodeクラスを使用して、円形マスクを作成し、マスク内にスプライトをアニメーション化しました。しかし、マスクのエッジはピクセル化されて見えます。SKCropNodeマスキングエッジアンチエイリアシング

アンチエイリアスを使用してエッジを滑らかにする方法はありますか?公式ドキュメントから

+0

マスクを達成するために使用したコードを共有できますか? – ZeMoon

+0

は、シミュレータまたはデバイス上にピクセル化されているように見えますか? –

+1

SKCropNodeはバイト値(0〜255など)ではなくブール値(0または1)のアルファ値を使用するので、仕様によれば、エッジがギザギザになることは間違いありません。 –

答えて

3

マスク内のピクセルが、0.05未満のアルファ値を有する場合、 画像ピクセルがマスクされます。

したがって、SKCropNodeはピクセルごとのアルファ値をサポートしていません。ピクセルを描画するか、描画しません。アルファ(アンチエイリアスで使用されているような)が重要な場合は、代替経路を検討する必要があります。

How to Mask an UIImageView

3

あなたはアンチエイリアシング効果を持つ任意のSKNode/SKSpriteNodeをマスクしたい場合 - あなたはSKEffectNode代わりのSKCropNodeを使用することができます。たとえば。これはアニメーションノードでも機能します。ここに例があります:

// Set up your node 
SKNode *nodeToMask = [SKNode node]; 
// ... 

// Set up the mask node 
SKEffectNode *maskNode = [SKEffectNode node]; 

// Create a filter 
CIImage *maskImage = [[CIImage alloc] initWithCGImage:[UIImage imageNamed:@"your_mask_image"].CGImage]; 
CIFilter *maskFilter = [CIFilter filterWithName:@"CISourceInCompositing" 
            keysAndValues:@"inputBackgroundImage", maskImage, nil]; 
// Set the filter 
maskNode.filter = maskFilter; 

// Add childs 
[maskNode addChild:nodeToMask]; 
[scene addChild:maskNode];