2010-04-10 5 views
1

J'utilise XNA et j'ai rencontré un petit problème. J'ai besoin de supporter plusieurs couches, chacune avec un ordre z distinct (j'appelle ces "viewports"). Une image vaut mille mots, voici donc ce qu'il devrait ressembler à:Rendu de plusieurs couches dans XNA

http://www.charlesstrahan.com/so_files/viewports.png

Il y a plusieurs choses à remarquer ici. Les sprites ne sont pas rendus en dehors de leur fenêtre d'affichage, comme vous pouvez le voir avec Sprite B. Notez également que les fenêtres sont rendues - c'est très similaire aux "couches" dans Photoshop. Bien que le Sprite C ait un ordre z de -1000, C reste au-dessus du Sprite A parce que l'ordre z de son viewport est supérieur à l'ordre z de la fenêtre A.

Il y a un dernier détail que je ne pouvais pas très bien montrer dans l'image ci-dessus. Chaque fenêtre doit éventuellement afficher une couleur sur sa zone d'écran - vous pourriez la considérer comme un effet de "teinte". Je suis complètement à court de XNA, alors je pourrais vraiment utiliser un petit extrait de code C#/VB.NET qui le démontre en action. Toute aide serait grandement appréciée.

Répondre

1

Vous pouvez facilement faire cela avec RenderTargets :-) Il y a beaucoup de ressources sur la façon de les utiliser sur le web (example).

Si vous ne faites que commencer votre projet yoru, pensez à installer le XNA 4.0 (en CTP dès maintenant via le SDK de Windows Phone). C'est devenu beaucoup plus facile dans la nouvelle version ... d'un article que Shawn Hargreaves a publié récemment, RenderTarget changes in XNA Game Studio 4.0.

List<Texture2D> textures = new List<Texture2D>(); 

for (int i = 0; i < 100; i++) 
{ 
    RenderTarget2D rt = new RenderTarget2D(...); 

    GraphicsDevice.SetRenderTarget(rt); 
    DrawCharacterAnimationFrame(i); 
    GraphicsDevice.SetRenderTarget(null); 

    textures.Add(rt); 
} 

Et le « teinter » vous posiez au sujet est Braindead facile avec cela parce que vous pouvez simplement appeler la méthode claire quand vous allez rendre chaque cible avec render quelle que soit la couleur que vous voulez.

0

Vous pouvez trier vos objets simplement en groupes les rendent chaque groupe afin de clipping

device.ClipPlanes[0].Plane = plane; 
device.ClipPlanes[0].IsEnabled = true;