Existe-t-il un moyen de faire des coins arrondis sur un rectangle rendu en XNA par le biais de primitives (lignes)? Je veux rendre mon interface utilisateur un peu plus sophistiquée qu'elle ne l'est déjà, et je voudrais que le code soit flexible, sans trop de textures.
10
Réponses:
Vous pouvez rendre votre primitive et créer un shader qui peut créer ces coins arrondis.
Voici un pixel shader simple en pseudocode qui peut dessiner un carré arrondi:
Résultat de ce pixel shader:
Si vous utilisez des shaders, vous pouvez créer une interface utilisateur vraiment fantaisiste, même animée.
Pour moi, le programme EvalDraw est un excellent prototype de pixel shaders simple.
la source
Une autre façon de procéder consiste à utiliser un «boutonnage boutonné» (également appelé «bout droit extensible» ou «patch neuf»). Essentiellement, vous créez une image composée de 9 parties:
Afin de dessiner ce bouton à n'importe quelle taille, vous dessinez chaque pièce (de haut en bas, de gauche à droite):
width - ((1) + (2)).Width
) en haut du rectangle de destination, la gauche étant décalée de la largeur de (1).height - ((1) + (2)).Height
) à gauche du rectangle de destination, le haut étant décalé de la hauteur de (1).Si vous regardez le bouton, vous verrez que cela n'a pas d'importance si (2), (5) et (7) sont mis à l'échelle horizontalement (car il s'agit essentiellement d'une ligne droite); de la même manière (4), (5) et (6) peuvent être mis à l'échelle verticalement sans affecter la qualité de l'image.
la source
Voici le code de l'approche "neuf patchs":
Il est invoqué comme:
la source
Texture2D _texture = new Texture2D(GraphicsDevice, 1, 1); _texture.SetData(new Color[] { Color.Blue }); SpriteBatch sb = new SpriteBatch(GraphicsDevice); sb.Begin(); //sb.Draw(_texture, new Rectangle(100, 100, 100, 100), Color.White); sb.DrawRoundedRect(_texture, new Rectangle(100, 100, 100, 100), Color.Pink, 16); sb.End();