Sprite-Kit-Sprite wird nicht eingefärbt

8

Ich versuche, einen SpriteNode (in diesem Fall den Namen Hintergrund) mit Sprite Kit zu färben, aber die Farbe kann nicht geändert werden. Ich habe ein Sprite, das ich kolorieren möchte. Ich ändere sowohl die Farbeigenschaft des Sprites als auch den Farbmischfaktor. Wenn ich die App starte, passiert nichts. die Farbe bleibt gleich (es ist gerade schwarz). Unten ist der Code, den ich verwende, um die Farbe zu ändern:

%Vor%

habe ich etwas vermisst? Ich lese die Dokumente durch und es scheint ein ziemlich einfacher Prozess zu sein. Ich glaube, alles, was ich brauche, sind diese 2 Zeilen, aber es hat keine Wirkung. Weiß jemand, warum das nicht funktionieren würde? Das Texturbild hat viel Transparenz, könnte das das Problem verursachen? Ich habe es auf verschiedenen Sprites versucht und es funktioniert nie.

    
Stone Preston 27.07.2014, 19:52
quelle

3 Antworten

10

In etwa so:

%Vor%

Sollte definitiv das Sprite der Wahl tönen. Die Sache ist, dass dies nicht intensive Mischung ist. Die Verwendung eines CIFilters mit einem SKEffectsNode ist sehr sehr intensiv für solch eine einfache Aufgabe.

Ich habe unten ein Beispiel, bei dem ein Sprite mit einer roten Tönung gemischt wird, wodurch der Sprite rot getönt wird, statt dessen die ursprüngliche orange Farbe:

%Vor%

Ich möchte auch darauf hinweisen, dass diese Klasse eine Unterklasse von SKSpriteNode ist.

Anbei ein Beispiel, bei dem ich den roten Farbton mit dem obigen Code angewendet habe.

Raywendlich hat ein schönes Zitat, das die Effekte beschreibt:

  

Hinweis: Weil die Farbtonfarbe mit der Originalfarbe zu multipliziert wird   Erhalten Sie das Endergebnis, wenn Sie die Farbe eines Sprites auf Blau setzen   Ergebnis wird nicht unbedingt blau sein - es hängt davon ab, was das Original ist   Die Farbe ist. Aus diesem Grund, wenn Sie ein Sprite dynamisch festlegen möchten   Farbe zu einer bestimmten Farbe, ist es bequem, die Quellfarbe zu machen   der Sprite weiß (wie die Katze in Zombie Conga). Wenn du Teile haben willst   Wenn dein Sprite unterschiedliche Farben hat, kannst du dein Sprite auch teilen   in verschiedene Teile, von denen jeder zu einer anderen Farbe tönt. Zum   Weitere Informationen finden Sie im Beat 'Em Up Game Starter Kit unter   raywendlich.com.

    
TheCodingArt 27.07.2014, 20:58
quelle
2

Eine ziemlich alte Frage, aber ich stieß von Zeit zu Zeit auf dieses Problem. Das colorBlendFactor ist nicht das, was man erwarten könnte, dass es Sprites neu einfärbt. Tatsächlich hängt die neue Farbe, die über die alte gemischt wird, stark von der Farbe ab, die vorher an dieser Stelle war.

Um dies zu vermeiden, verwende ich überlagernde Sprites (wie bereits erwähnt) und die Alpha-Werte des darunterliegenden und des überlagernden Sprites, um die erwarteten Farben zu erzeugen.

Um zum Beispiel das folgende Sprite langsam von Blau zu Grau zu mischen, verwende ich zwei Sprites:

(Das blaue Sprite ist das Original und das graue Sprite ist nur eine Version des blauen Sprites, manipuliert mit dem ColorSync Utility auf dem Mac.)

und dieser Code (Swift):

%Vor%

Ziemlich viel Code. Ich hoffe, die Idee kommt zustande. Sie können mit den Zeiten in der Aktion herumspielen oder fadeAlphaTo/By anstelle von fadeIn/OutWithDuration verwenden, um die gewünschten Effekte zu erzielen.

    
jboi 02.02.2015 22:43
quelle
-4

SKColor löscht alle anderen Pixel und nicht die Pixel der ausgewählten Farben. Wenn Ihr Bild also keine roten Pixel enthält, wird [SKColor redColor] nicht funktionieren. Ich schlage vor, dass Sie CIHueAdjust verwenden, was ein CIFilter ist.

    
Ahmet Hayrullahoglu 27.07.2014 20:47
quelle