Ich suche nach einer Möglichkeit, jedes nicht transparente Pixel in einem festen Sprite-Weiß zu rendern (um das Sprite-Weiß zu "blinken", wenn der Spieler Schaden nimmt usw.). Dies ist unter Windows Phone 7.
Ich habe einen sehr einfachen benutzerdefinierten Shader verwendet, um dies unter XNA 3.1 zu tun, aber WP7 unterstützt diese nicht und es ist schwierig, eine Alternative zu finden.
Ich würde mich über Hilfe oder Vorschläge freuen. Ich möchte jedoch lieber nicht manuell eine solide weiße Kopie jedes Sprites in meinem Spiel erstellen.
xna
shaders
windows-phone-7
Ryan McD
quelle
quelle
Antworten:
Methode 1
Sie müssen nicht manuell eine solide weiße Version jedes Sprites in Ihrem Spiel erstellen - Sie können den Prozess auch beim Laden automatisieren. Mit anderen Worten, Sie können
Texture2D.GetData()
auf die Pixel Ihrer Textur zugreifen (und sie einfach abrufenColor[]
), sie durchlaufen und nicht transparente Pixel durch festes Weiß ersetzen und sie dann mit und in einer neuen Textur speichernTexture2D.SetData()
.Methode 2
Ich habe versucht, damit herumzuspielen
BlendState
, konnte aber keinen Weg finden, alles weiß zu machen, zumindest nicht innerhalb der Grenzen des Reach-Profils. Aber wenn jemand einen Weg kennt, lass es mich wissen. Was ich jedoch gefunden habe, war eine Möglichkeit, dies mit dem Schablonenpuffer und der eingebautenAlphaTestEffect
Klasse zu tun . Die Idee ist die folgende:Hier ist der Code, den ich verwendet habe:
(Schritt 1) Stellen Sie zunächst sicher, dass der Backbuffer mit Platz für einen Schablonenpuffer erstellt wird:
(Schritt 2) Erstellen Sie eine 1x1 weiße Textur, die so skaliert wird, dass sie den gesamten Bildschirm ausfüllt:
(Schritt 3) Und jetzt der schwierige Teil - das Rendern. Nun, nicht wirklich schwer, erfordert aber zwei
DepthStencilState
Objekte und einAlphaTestEffect
Objekt. Sie sollten diese nur einmal erstellen.Und das Ergebnis:
quelle