2016-04-06 16 views
2

私はオーバーレイパネルSKSceneSCNSceneに持っています。このパネルには、SKSpriteNodeという色が含まれています。私は、パネルに背景のぼかし効果を追加する方法を知らない。SKSpriteNode(またはSKScene)に背景ぼかしを追加

This is the ColorPanel SKScene

別の質問:私は、パネルを追加するには、このメソッドを使用します。

colorPanelScene = SKScene(fileNamed: "art.scnassets/ColorPanelScene")! 
SCNsceneView.overlaySKScene = colorPanelScene 
SCNsceneView.overlaySKScene!.userInteractionEnabled = true; 

はこれが正しい方法ですか私は別々のUIViewように、パネルを作成して(とぼかしを適用すべきです効果はより単純な方法で)?

答えて

6

オーバレイシーンにSKEffectsNodeを追加すると、この効果が得られます。

少し難解ですが、やっているように読み込むだけでは十分ではありません。

このメソッドは、バックグラウンドが静的である場合にのみ機能します。基本的には、背景をスクリーンショットし、それをぼやけさせるためにSKEffectNodeにロードすることです。

SceneKitエディタで、シーンにノードを追加し(このノードが他のノードの子ではないことを確認してください)、このノードのクラスを名前がSKEffectNodeに設定していることを確認したら、EffectNode 。これは、設計時にできるだけ少なくなるべくzPositionでなければなりません。 、そして、

if let effectNode = colorPanelScene.childNodeWithName("EffectNode") as? SKEffectNode { 
    let blur = CIFilter(name:"CIGaussianBlur",withInputParameters: ["inputRadius": 10.0]); 
    effectNode.filter = blur; 
    effectNode.shouldRasterize = true; 
    effectNode.shouldEnableEffects = true; 


    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0) 
     view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    let node = SKSpriteNode(texture:SKTexture(image: image)); 
    effectNode.addChild(node); 
} 

SKEffectNodeの上に別のSKNodeを追加し、それはSKEffectNodeの子ではないことを確認してください:

は、その後のコードでは、次の操作を行いたいです。オーバーレイ要素をすべてSKNodeにスローします。

+0

"let node = SKSpriteNode(imageNamed:image);" xCodeは言った: "型の値を変換することはできません 'UIImage!'期待される引数型 'String'に " –

+1

固定しました。テクスチャを作るのを忘れました – Knight0fDragon

4

私はUIVisualEffectViewとします。それは、UIKitとCore Animationの皆さんから素晴らしい最適化を得ており、プラットフォーム上で一貫して見えるようにします。

+0

もっと多くのビューを追加することを意味しますか? SCNScene + UIViewとぼかし効果? –

+1

はい。 'SCNView'、UIの' UIVisualEffectView'、 'UIView'、または' SKView'です。 – mnuages

+0

これは簡単ですが、パフォーマンスが低下する可能性があります。そうですか? –

関連する問題