Page 1 sur 1

Créer un contour autour d'une grille

Publié : 23 Avr 2023 14:10
par juliuson
Salut à tous,

J'ai réussi à tracer les lignes Right, Left, Top, Bottom dans la grille. Le problème c'est que cela ne marche mais pas avec le contour de celle-ci.
Voici le code pour créer le coté Gauche et ce que cela donne visuellement:
Image

Et le code ici:
GameObject contour = new GameObject("GridContour");
        contour.transform.SetParent(transform);
        LineRenderer CreateLine(Transform parent, Material material, float width, Vector3 startPos, Vector3 endPos)
        {
            LineRenderer line = new GameObject("Line").AddComponent<LineRenderer>();
            line.transform.SetParent(parent);
            line.useWorldSpace = false;
            line.material = material;
            line.startWidth = line.endWidth = 0.2f;                      // Epaisseur de la ligne (0.2f);
            line.SetPositions(new Vector3[] { startPos, endPos });
            return line;
        }

        // Boucle pour créer les lignes et mettre à jour les indices l et m
        for (int x = -Lignes / 2; x < Lignes / 2; x++)
            for (int y = -Colonnes / 2; y < Colonnes / 2; y++)                       // bord gauche
            {
                int l = x + Lignes / 2;
                int m = y + Colonnes / 2;

                if (Grille[l, m] != -1) continue; 

                if (y > 0 && Grille[l, m - 1] == -1) continue;

                Vector3 startPos = new Vector3(x * LINE_SCALE, 0, y * LINE_SCALE);
                Vector3 endPos = new Vector3(x * LINE_SCALE, 0, (y + 1) * LINE_SCALE);
                CreateLine(contour.transform, contourMaterial, 2f, startPos, endPos);
            }
Voilà ce je cherche à faire (tracer un contour de 2 pixels blancs autour de la grille)

Image

J'ai tenté ce bout de code:
void Start()
    {
        for (int i = 0; i < Lignes + 1; i++)
            for (int j = 0; j < Colonnes + 1; j++)
            {
                Grille[i, j] = -1;
            }

        for (int i = 1; i < Lignes; i++)
            for (int j = 1; j < Colonnes; j++)
            {
                Grille[i, j] = 0;
            }

        Grille[1, 2] = -1;
        Grille[6, 4] = -1;
        Grille[1, 1] = -1;
    
        CreateGrid();
    }
Mais cela ne marche pas, je cherche à créer un contour de cases valant -1 autour de cases valant 0 (pour tester si la case qui est à gauche de celle-ci est vide. Dans ce cas décaler d'une case vers la droite).
En effet comme vous pouvez le voire il n'y a pas de contour autour de la grille.
Voici le code que je crée en image:
Image


Merci pour votre aide,

A+

Re: Enlever le quadrillage d'une grille

Publié : 23 Avr 2023 19:56
par juliuson
Désolé pour ce message, je viens de trouver la solution.

Il fallait remplacer:
const float LINE_SCALE = 1.65f;
par
const float LINE_SCALE = 1.6f;
Merci quand même,

A+

Re: Créer un contour autour d'une grille

Publié : 19 Mai 2023 16:57
par juliuson
J'essaie de dessiner un contour autour de ma grille.
Pour simplifier, nous ne traiterons ici que du côté gauche de la grille.

Pour ce faire, je dessine des petits traits verticaux de hauteur 1.6f (avec le code suivant) pour tracer les morceaux de trait qui font le contour d'une grille (DrawLine):
lineRenderer.SetPosition(0, startPoint);
lineRenderer.SetPosition(1, endPoint);
Voici mon code :
 for (int i = 0; i < Lignes; i++)
        {
            fo (int j = 1; j < Colonnes; j++)
            {
                if ((Grille[i, j] != -1) && (Grille[i, j - 1] == -1))
                {
                    for (float z = topLeft.z - lineLength + 1.6f ; z >= bottomLeft.z + 1.6f ; z -= lineLength)
                    {
                        DrawLine(new Vector3(topLeft.x, 0f, z), new Vector3(topLeft.x, 0f, z - lineLength));
                    }
                }
            }
        }
Seulement la grille a des cellules vides, comme dans l'image ci-dessous.

Et le code trace une ligne verticale sur le côté gauche et même dans le vide.

Alors que le code dit de ne dessiner que si la case de gauche est vide (-1) et la case droite est pleine (0) :
Code (CSharp):
( si ((Grille[i, j] != -1) && (Grille[i, j - 1] == -1)))
Ce que je cherche, c'est d'avoir le même résultat que le GOOD sur l'image (des petits bouts de lignes verticaux de 1.6f de large et de hauteur qui s'adapte aux cases).
Image

Merci pour votre aide,

A+

Re: Créer un contour autour d'une grille

Publié : 19 Mai 2023 17:32
par boubouk50
Parce que x vaut toujours TopLeft.x, non?

Re: Créer un contour autour d'une grille

Publié : 19 Mai 2023 17:57
par juliuson
En effet, en changeant x (en rajoutant 1.6f), la ligne se déplace d'une case vers la droite.
Le problème c'est que le code doit tester si la case possède une case voisine à gauche de vide.
Il ne devrait pas dessiner de bouts de lignes dans les cases pleines.
J'utilise bien la condition suivante :
if (grille[i, j - 1] == -1)
mais cela ne marche pas.

Voila mon nouveau code simplifié:
        float lineHeight = 1.6f;
        int gridWidth = 8; // Définissez la largeur de la grille
        int gridHeight = 8; // Définissez la hauteur de la grille

        for (int row = 0; row < gridHeight; row++)
        {
            for (int column = 1; column < gridWidth; column++)
            {
                if (Grille[row, column] == 0 && Grille[row, column - 1] == -1)
                {
                    float x = column * lineHeight; // Calcul de la coordonnée x de la ligne

                    DrawLine(new Vector3(x, 0f, row * lineHeight), new Vector3(x, 0f, (row + 1) * lineHeight));
                }
            }
        }
Si vous avez du code pour créer le contour comme sur l'image GOOD.

Image


Merci à vous,

A+

Re: Créer un contour autour d'une grille

Publié : 22 Mai 2023 10:44
par boubouk50
On peut avoir le résultat du code en cours ?
je suppose que tu n'as pas la ligne de gauche, si ?
Il te faut séparer la condition de check à gauche de celle en cours, puisque tu ne peux pas directement tester lorsque column=0.
En premier lieu, tu testes si Grille[row, column] == 0.
Si c'est le cas, alors ensuite tu peux tester Grille[row, column - 1] seulement si column > 0.
Puisque si column = 0 on peut considéré que column-1 = -1 (il n'y a pas de colonne a gauche du bord gauche)
Basé sur mes suppositions :

Code : Tout sélectionner

for (int row = 0; row < gridHeight; row++)
        {
            for (int column = 0; column < gridWidth; column++)
            {
                if (Grille[row, column] == 0)
                {
                   // Si la premiere colonne alors OK
                   if (column == 0)
                   {
                      DrawLine(new Vector3(0f, 0f, row * lineHeight), new Vector3(0f, 0f, (row + 1) * lineHeight));
                   }
                   else  if (Grille[row, column - 1] == -1)
                   {
                   	float x = column * lineHeight; // Calcul de la coordonnée x de la ligne
                        DrawLine(new Vector3(x, 0f, row * lineHeight), new Vector3(x, 0f, (row + 1) * lineHeight));
                    }
                }
            }
        }

Re: Créer un contour autour d'une grille

Publié : 22 Mai 2023 12:24
par juliuson
Bonjour à tous,

Le code donne le résultat suivant:
Image

Comme vous pouvez le voir il y a un léger problème au niveau du résultat.

Dans le code le tableau Grille doit être parcouru de bas en haut et de gauche à droite.

Si vous avez du bon test, qui donne le résultat de GOOD (voir image des messages ci-dessus).

Encore merci,

A+