Sie können Ihrer Overlay-Szene eine SKEffectsNode
hinzufügen, um diesen Effekt zu erzielen.
Es ist ein wenig schwierig, wenn Sie es so laden, wie Sie es tun, wird nicht genug sein.
Diese Methode funktioniert nur, wenn der Hintergrund statisch ist. Im Grunde werden wir den Hintergrund screenen und in ein SKEffectNode
laden, um es zu verwischen.
Fügen Sie im SceneKit-Editor einen Knoten zur Szene hinzu (stellen Sie sicher, dass er keine untergeordneten Knoten ist), und stellen Sie sicher, dass Sie die Klasse dieses Knotens als SKEffectNode
mit einem Namen festlegen, ich werde es EffectNode nennen . Diese sollte beim Entwerfen die niedrigste zPosition
haben.
dann in Code, möchten Sie folgendes tun:
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);
}
Dann fügen Sie eine weitere SKNode
auf dem SKEffectNode
, aber stellen Sie sicher, dass es nicht ein Kind des SKEffectNode
ist. Werfen Sie alle Ihre Overlay-Elemente in diese .
in Zeile "let node = SKSpriteNode (imageNamed: image);" xCode sagte: "Wert des Typs 'UIImage!' kann nicht konvertiert werden." to expected argument type 'String' " –
Fehler behoben, habe vergessen, dass ich eine Textur erstellen soll – Knight0fDragon