2010-10-07 4 views
2

Je ne fais que commencer le développement de jeux et j'ai pensé qu'un jeu comme Tank wars ou Worms serait sympa. La partie la plus difficile que je puisse penser jusqu'ici est de rendre le terrain destructible et je veux savoir comment cela se fait avant de faire les parties faciles. Je pensais que l'explosion pourrait avoir une texture de masque qui pourrait être mise à l'échelle pour différentes armes. Ensuite, en utilisant ce masque, je devrais rendre le terrain sous-jacent transparent (et éventuellement dessiner une bordure sombre). http://mikakolari.fi/wp-content/uploads/2010/10/terrain.png Comment puis-je y parvenir? Dois-je modifier la valeur alpha pixel par pixel ou puis-je utiliser une sorte de technique de masquage? Dessiner un cercle bleu sur le terrain n'est pas une option.Rendre des parties de Texture2D transparentes dans XNA

J'ai les versions 3.1 et 4.0 de XNA.

+0

Si vous allez faire la texture transparente et vous utiliserez une sorte de détection de collision, vos objets seront probablement flotter quelque part dans l'air à cet endroit particulier. –

+0

Je peux utiliser la détection de collision par pixel contre les pixels non transparents. –

Répondre

1

C'est une question difficile à répondre - parce qu'il y a plusieurs façons de le faire. Et il y a des avantages et des inconvénients pour chaque méthode. Je vais donner un aperçu:

Dans un design global, vous devez garder une trace de: la texture d'origine, la "noirceur" appliquée et la "transparence" appliquée. Une chose que je peux dire presque sûrement, c'est que vous voulez «accumuler» les résultats des explosions quelque part - ce que vous ne voulez pas faire, c'est maintenir une liste de toutes les explosions qui ont déjà eu lieu.

Vous avez donc des surfaces pour la texture, l'obscurité et la transparence. Vous pourriez probablement fusionner l'obscurité et la transparence en une seule surface avec un seul canal qui stocke "normal", "sombre" (ou un niveau d'obscurité) et "transparent". Parce que vous ne voulez probablement pas que les anneaux sombres deviennent progressivement plus sombres là où ils se croisent, lorsque vous appliquez une explosion à votre couche d'obscurité avec la fonction max (Math.Max en C#). Pour produire votre texture finale, vous pouvez simplement écrire de la texture obscurité/transparence à votre texture originale ou une copie de celle-ci (il vous suffit de mettre à jour la zone que touche chaque explosion).

Ou vous pouvez utiliser un pixel shader pour les combiner - dont les détails dépassent la portée de cette question. (Également un pixel shader ne fonctionnera pas sur XNA 4.0 sur Windows Phone 7.)

3

Ce tutoriel est ce que vous recherchez: http://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.php

Capter 20: Ajout des cratères d'explosion

En bref: Vous avez 2 textures: 1 Texture de couleur (visible), 1 Texture de collision (invisible) Vous soustrayez l'image de l'explosion de votre texture de collision. Pour obtenir la bordure sombre: développez la texture de l'explosion et assombrissez la couleur dans cette zone. Vous générez maintenant une nouvelle texture de couleur (ancienne couleur - collison = nouvelle couleur).

0

Vous devriez faire une nouvelle Texure2D avec la couleur de pixels.Alpha = 0.

Color[] bits = new Color[Texture.Width * Texture.Height]; 
Texture.GetData(bits); 

foreach(Vector2D pixel in overlapedArea) 
{ 
    int x = (int)(pixel.X); 
    int y = (int)(pixel.Y); 

    bits[x + y * texture.Width] = Color.FromNonPremultiplied(0,0,0,0)); 
} 

Texture2D newTexture = new Texture2D(texture.GraphicsDevice, texture.Width, texture.Height); 
newTexture.SetData(bits); 

Maintenant, la nouvelle remplacer Texture2D avec la dernière texture et souhaité vous êtes bon pour vous!

Pour plus de code sur les collisions, ou de changer les pixels de texture couleur aller à cette page pour les codes: http://www.codeproject.com/Articles/328894/XNA-Sprite-Class-with-useful-methods

Questions connexes