Je cherche un moyen de rendre chaque pixel non transparent dans un blanc solide de sprite (pour «flasher» le blanc de sprite lorsque le joueur subit des dégâts, etc.). C'est sur Windows Phone 7.
J'utilisais un shader personnalisé très simple pour le faire sous XNA 3.1, mais WP7 ne les prend pas en charge et il est difficile de trouver une alternative.
J'apprécierais toute aide ou suggestion. Je préfère ne pas avoir à créer manuellement une copie blanche solide de chaque image-objet de mon jeu.
xna
shaders
windows-phone-7
Ryan McD
la source
la source
Réponses:
Méthode 1
Vous n'avez pas à créer manuellement une version blanche solide de chaque image-objet de votre jeu - vous pourriez tout aussi bien automatiser le processus au moment du chargement. En d'autres termes, vous pouvez utiliser
Texture2D.GetData()
pour accéder aux pixels de votre texture (et les récupérer de manière simpleColor[]
), les parcourir en remplaçant tout pixel non transparent par du blanc uni, puis l'enregistrer dans une nouvelle texture à l'aide de etTexture2D.SetData()
.Méthode 2
J'ai essayé de jouer avec,
BlendState
mais je n'ai pas trouvé de moyen de le rendre tout blanc, du moins pas dans les limites du profil Reach. Mais si quelqu'un connaît un moyen, faites-le moi savoir. Ce que j'ai trouvé, cependant, était un moyen de le faire en utilisant le tampon de gabarit et laAlphaTestEffect
classe intégrée . L'idée est la suivante:Voici le code que j'ai utilisé:
(Étape 1) Assurez-vous d'abord que le backbuffer est créé avec de la place pour un tampon de pochoir:
(Étape 2) Créez une texture blanche 1x1 qui sera mise à l'échelle pour remplir tout l'écran:
(Étape 3) Et maintenant la partie difficile - le rendre. Eh bien, pas vraiment difficile, mais nécessite deux
DepthStencilState
objets et unAlphaTestEffect
objet. Vous ne devez les créer qu'une seule fois.Et le résultat:
la source