Es stellt sich heraus, dass dies überhaupt nicht schwer ist. Es ist nur, dass die Core Image Filter Dokumente sind OLD und crafty und im Fall von SpriteKit, die Dokumente sind irreführend oder unvollständig, einschließlich der SKEffectNode Docs. Die SKEffectNode docs haben diese (wie dieses post) zu sagen, auf dem Filter Eigenschaft SKEffectNode:
Der Bildfilter Kern muss einen einzelnen inputImage Parameter haben und einen einzelnen outputImage Parameter erzeugen . Der Standardwert ist Null. Wenn der Wert Null ist und der Effektknoten aktiviert ist, wird keine Filterung vorgenommen. Die untergeordneten Elemente werden jedoch weiterhin in einem separaten Durchgang gerendert und mit dem Framebuffer des übergeordneten Elements gemischt.
Nun, die Art informativ ist, aber nicht sehr informativ, da der Katalog Core Image Filter sagt CIPixellate die folgenden Tasten für Parameter: inputImage inputCenter inputScale Es sagt nichts über ein outputImage oder dass die inputScale "wie pixelig" ist.
Nun, das ist das ... schauen wir uns an, wie.
First off, beachten Sie, dass SKScene erbt von SKEffectNode. Das bedeutet, dass Sie CIFilter hinzufügen können. Genial.
Alles, was Sie tun müssen, ist dies.
Erstellen Sie zuerst einen CIFilter.
CIFilter *pixellateFilter;
pixellateFilter = [CIFilter filterWithName:@"CIPixellate"];
[pixellateFilter setDefaults]; // Remember to setDefaults...
// We could change some value but for this one we won't.
// [pixellateFilter setValue:@(10.0) forKey:@"inputScale"];
Konfigurieren Sie dann Ihren SKEffectNode, um Effekte zu rendern !.
[aScene setShouldEnableEffects:YES];
Es ist keine schlechte Idee, den Filter zu zentrieren. Aber Ihre Laufleistung kann variieren.
[aScene setShouldCenterFilter:YES];
Als nächstes den Filter hinzufügen.
[aScene setFilter:pixellateFilter];
Beachten Sie, dass dies vor oder nach dem hinzufügen kann es zu einem übergeordneten Knoten hinzugefügt wird und vor oder nach dem es auf dem Bildschirm ist. Sie können sogar benutzerdefinierte SKActions erstellen, um dies zu tun ...:)
Von all dem ist eine Sache, die Sie beachten können, dass der Core Image Filter-Katalog, so alt wie es ist, Ihnen sagen, dass verschiedene Filter Mitglieder verschiedener CICategory-Typen sind, obwohl diese schlecht als dokumentiert sind Gut. Aber Sie können grundsätzlich davon ausgehen, dass alles, was in einer bestimmten Kategorie funktioniert, auch andere Filter in dieser Kategorie beinhaltet :)
Ich kann das nicht mit SpriteKit, Swift und iOS 8 machen. Wenn ich den Effekt hinzufüge In 'didMoveToView()' ist das Ergebnis nur, dass der Hintergrund schwarz wird und die Bewegung der Knoten eine Spur zum Hintergrund zurücklässt. Ist es möglich, einen vollständigen Code der Klassenerweiterung 'SKScene' zu teilen? –
Subclassing statt Klassenerweiterung. Aber ich habe dies auf OSX nicht sicher, ob das der richtige Ort für iOS ist. – uchuugaka
Ja * Unterklasse (Typo). Ich denke, das Wichtigste ist, dass dies auch mit iOS funktioniert. Siehe meine Frage hier: http://stackoverflow.com/questions/26072230/applying-a-custom-skshader-to-kscene-that-pixelates-the-whole-rended-scene-in- –