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.
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.
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.
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.
Tags und Links objective-c sprite-kit sprite blending colorize