Créer un contour autour d'une grille

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Créer un contour autour d'une grille

Message par juliuson » 23 Avr 2023 14:10

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+
Dernière édition par juliuson le 25 Avr 2023 16:47, édité 4 fois.

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Re: Enlever le quadrillage d'une grille

Message par juliuson » 23 Avr 2023 19:56

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+

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

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

Message par juliuson » 19 Mai 2023 16:57

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+

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 19 Mai 2023 17:32

Parce que x vaut toujours TopLeft.x, non?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

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

Message par juliuson » 19 Mai 2023 17:57

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+

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 22 Mai 2023 10:44

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));
                    }
                }
            }
        }
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

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

Message par juliuson » 22 Mai 2023 12:24

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+

Répondre

Revenir vers « Scripting »