9
votes

Comment dessiner la frontière d'une place?

J'utilise monogame (qui utilise l'interface API XNA) pour écrire mon jeu. Jusqu'à présent, c'est génial, mais j'ai frappé un accrochage sur quelque chose qui devrait être simple.

J'ai besoin de dessiner une carré 2D. Mais je veux seulement la frontière (pas de remplissage).

J'ai vu de nombreux exemples qui montrent comment faire un rempli. Mais aucun qui ne montrera une frontière seulement.

Je suppose que je peux faire une image et utiliser cela. Mais je doute que cela redimensionnait bien.


0 commentaires

4 Réponses :


8
votes

Je viens de créer une méthode d'extension pour texture2d de cette manière: xxx

puis je l'ai testé: xxx

Le résultat est le suivant:

Entrez la description de l'image ici


5 commentaires

Cela a fonctionné mais il remplace mon dessin de texture. Donc +1 parce que cela a fonctionné mais j'essayais de trouver quelque chose qui dessinerait une boîte autour / sur ma texture afin que je puisse voir où sont mes limites.


Pour éviter que la texture primordiale, tirez simplement la place d'abord. Cela devrait marcher, faites-moi savoir.


@Fuex BAT-SIGNAL : SAM sur le jeu Dev SE semble avoir ramassé votre code et trouvé un problème avec elle. Je n'ai pas installé xna alors je ne peux pas jouer avec ça, mais si tu as le temps, pourriez-vous avoir un coup d'oeil?


@Anko pixel Color AdResing est mauvais, devrait être X + Y * Largeur. ça marche sur un carré mais pas sur un rectangle


@Blau pour un carré Cela ne crée pas de problèmes car la hauteur et la largeur sont égales. Althoublement, corrigé pour un rectangle, merci.



7
votes

Peut-être que vous pouvez utiliser une texture de 1x1 pixels sur dessiner les bords individuels forts> avec un lot de sprite. Dans XNA, vous pouvez le faire:

sb.Begin(); //spritebatch
RectangleSprite.DrawRectangle(sb, new Rectangle(10, 10, 50, 100), Color.Red, 1);
RectangleSprite.DrawRectangle(sb, new Rectangle(30, 20, 80, 15), Color.Green, 4);
RectangleSprite.DrawRectangle(sb, new Rectangle(70, 40, 40, 70), Color.Blue, 6);
sb.End();


0 commentaires

4
votes

J'ai fait une classe d'utilité pour dessiner des primitives. Vous pourriez le trouver utile xxx


0 commentaires

3
votes

Voici comment je le ferais:

    private void OutLine_Box(SpriteBatch sbatch, Rectangle rect)
    {
        List<Vector2> pixels = new List<Vector2>();
        for (int x = rect.X; x < rect.X + rect.Width; x++)
        {
            for (int y = rect.Y; y < rect.Y + rect.Height; y++)
            {
                if (y == rect.Y || y == rect.Y + rect.Height - 1)
                    pixels.Add(new Vector2(x, y));
                if (x == rect.X || x == rect.X + rect.Width - 1)
                    pixels.Add(new Vector2(x, y));
            }
        }

        foreach (Vector2 v in pixels)
            sbatch.Draw(PixelTexture, v, OutLineColor);
    }


0 commentaires