スプライトキットSKCropNodeクラスを使用して、円形マスクを作成し、マスク内にスプライトをアニメーション化しました。しかし、マスクのエッジはピクセル化されて見えます。SKCropNodeマスキングエッジアンチエイリアシング
アンチエイリアスを使用してエッジを滑らかにする方法はありますか?公式ドキュメントから
スプライトキットSKCropNodeクラスを使用して、円形マスクを作成し、マスク内にスプライトをアニメーション化しました。しかし、マスクのエッジはピクセル化されて見えます。SKCropNodeマスキングエッジアンチエイリアシング
アンチエイリアスを使用してエッジを滑らかにする方法はありますか?公式ドキュメントから
:
マスク内のピクセルが、0.05未満のアルファ値を有する場合、 画像ピクセルがマスクされます。
したがって、SKCropNodeはピクセルごとのアルファ値をサポートしていません。ピクセルを描画するか、描画しません。アルファ(アンチエイリアスで使用されているような)が重要な場合は、代替経路を検討する必要があります。
あなたはアンチエイリアシング効果を持つ任意の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];
マスクを達成するために使用したコードを共有できますか? – ZeMoon
は、シミュレータまたはデバイス上にピクセル化されているように見えますか? –
SKCropNodeはバイト値(0〜255など)ではなくブール値(0または1)のアルファ値を使用するので、仕様によれば、エッジがギザギザになることは間違いありません。 –