Page 3 sur 3

Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 23 Juil 2019 21:49
par Platypuss
Merci, ça va mieux

Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 24 Juil 2019 07:45
par EmileF
Il faudrait que tu lises les conseils jusqu'au bout, le moindre détail compte.

Dans mon exemple plus haut, je t'avais précisé "tu modifies "Wood" attention avec une Majuscule.".

C'est vrai que c'est plus clair l'exemple que t'a donné "Alesk", avec le variable précédée de "_" pour les différencier, je n'en ai pas le réflexe, mais ne survole pas les explications sinon, ça ne sert à rien les conseils qu'on peut de donner.

Bon courage.

Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 25 Juil 2019 10:30
par Platypuss
Salut, je pense ne pas en avoir fini avec mon projet, mais ça me fait kiffer.

En bref, j'arrive plus à améliorer ma forge au niveau 2.

Ce qui se passe, c'est que quand je l'améliore, il me print bien "forge améliorée", i l me cache et me montre bien les objet, mais au lieu de m'ajouter -50 au ressources, il m'en ajoute50 et il reste au niveau 1, cela me bloque dans mon avancé. une solution ?

(J'ai juste copié collé le script upCastle)

Code : Tout sélectionner

public class DataRessourcesUpdates : MonoBehaviour {

    private int woodNeedForCastle = 100;
    private int rockNeedForCastle = 100;

    public GameObject cl1;
    public GameObject cl2;
    public GameObject cl3;

    public int Level_Castle = 1;

    private int YcanUpCastle = 1;

    private int woodNeedForForge = 50;
    private int rockNeedForForge = 50;

    public GameObject fl1;
    public GameObject fl2;
    public GameObject fl3;

    public int Level_Forge = 1;

    private int YcanUpForge = 1;

    public Text woodtext;
    public Text rocktext;

    private int _wood = 10000;
    private int _rock = 10000;

    //Améliorer le Castle

    public void UpCastle()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 200;
            rockNeedForCastle = 200;

            Level_Castle = 2;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);

            YcanUpForge = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 400;
            rockNeedForCastle = 400;

            Level_Castle = 3;
            print("Château amélioré !");

            cl2.SetActive(false);
            cl3.SetActive(true);

            YcanUpForge = 1;

        }
    }

    //Améliorer la Forge

    public void UpForge()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        {

            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 80;
            rockNeedForForge = 80;

            Level_Forge = 2;
            print("Forge amélioré !");

            fl1.SetActive(false);
            fl2.SetActive(true);

            YcanUpCastle = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        {
            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 120;
            rockNeedForForge = 120;

            Level_Forge = 3;
            print("Forge amélioré !");

            fl2.SetActive(false);
            fl3.SetActive(true);

            YcanUpCastle = 1;

        }
    }

    //Afficher le nombre de ressources

    private int wood
    {
        get { return _wood; }
        set
        {
            _wood = value;
            woodtext.text = "wood : " + _wood.ToString();
        }
    }

    private int rock
    {
        get { return _rock; }
        set
        {
            _rock = value;
            rocktext.text = "rock : " + _rock.ToString();
        }
    }
}
Merci beaucoup :amen:

Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 26 Juil 2019 07:45
par Moi 1971
Bonjour, our comprendre un peu mieux ce qui se passe, il te faut améliorer les messages de debug.
Il vaut mieux "print("Château amélioré niveau 2");" que seulement "print("Château amélioré !");"
Identifier chaque print est important, là tu ne sais pas lequel s'affiche.

Code : Tout sélectionner

 public void UpCastle()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            ...
            Level_Castle = 2;
            print("Château amélioré niveau 2!");
            ...
        }

        //Améliorer au level 3
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            ...
            Level_Castle = 3;
            print("Château amélioré niveau 3!");
            ...
        }
et idem pour la forge...
En suite ton problème vient probablement d’ailleurs, peux-tu copier/coller tout le code?
Ps : Et aussi, tu peux passer YcanUp... en bool et non plus en Int, ca évitera les erreurs.
Ps2 : Tu démarres le jeu avec 1000 en ressource et il faut 100 pour le château et 50 pour la forge pour le niv 2 puis 200 et 100 pour le niv 3..
ce qui fait que tu passe en deux frames au niv 3 normalement... c'est trop rapide pour comprendre ce qui se passe... commence par mettre 90 en ressource pour le château et modifie la valeur en direct...

Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 26 Juil 2019 09:30
par Platypuss
Voici le code en entier

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DataRessourcesUpdates : MonoBehaviour
{

    private int woodNeedForCastle = 100;
    private int rockNeedForCastle = 100;

    public GameObject cl1;
    public GameObject cl2;
    public GameObject cl3;

    public int Level_Castle = 1;

    private int YcanUpCastle = 1;

    private int woodNeedForForge = 50;
    private int rockNeedForForge = 50;

    public GameObject fl1;
    public GameObject fl2;
    public GameObject fl3;

    public int Level_Forge = 1;

    private int YcanUpForge = 1;

    public Text woodtext;
    public Text rocktext;

    private int _wood = 10000;
    private int _rock = 10000;

    public int RockCollect = 4;
    public int NumberCutRock = 3;
    public GameObject Rock;

    public int WoodCollect = 4;
    public int NumberCut = 3;
    public GameObject Tree;

    //Améliorer le Castle

    public void UpCastle()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 200;
            rockNeedForCastle = 200;

            Level_Castle = 2;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);

            YcanUpForge = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 400;
            rockNeedForCastle = 400;

            Level_Castle = 3;
            print("Château amélioré !");

            cl2.SetActive(false);
            cl3.SetActive(true);

            YcanUpForge = 1;

        }
    }

    //Améliorer la Forge

    public void UpForge()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        {

            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 80;
            rockNeedForForge = 80;

            Level_Forge = 2;
            print("Forge amélioré !");

            fl1.SetActive(false);
            fl2.SetActive(true);

            YcanUpCastle = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        {
            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 120;
            rockNeedForForge = 120;

            Level_Forge = 3;
            print("Forge amélioré !");

            fl2.SetActive(false);
            fl3.SetActive(true);

            YcanUpCastle = 1;

        }
    }

    //Afficher le nombre de ressources

    private int wood
    {
        get { return _wood; }
        set
        {
            _wood = value;
            woodtext.text = "wood : " + _wood.ToString();
        }
    }

    private int rock
    {
        get { return _rock; }
        set
        {
            _rock = value;
            rocktext.text = "rock : " + _rock.ToString();
        }
    }

    public void OnMouseDown()
    {
        if (NumberCutRock != 0)
        {
            rock = rock + RockCollect;
            NumberCutRock = NumberCutRock - 1;
            RockCollect = RockCollect + 3;

            Debug.Log("Ils vous reste " + NumberCutRock);
            Debug.Log("Vous avez récolté " + RockCollect);
        }
        else
        {
            Rock.SetActive(false);
        }


        if (NumberCut != 0)
        {
            wood = wood + WoodCollect;
            NumberCut = NumberCut - 1;
            WoodCollect = WoodCollect + 3;

            Debug.Log("Ils vous reste " + NumberCut);
            Debug.Log("Vous avez récolté " + WoodCollect);
        }

        else
        {
            Tree.SetActive(false);
        }
    }
}


Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 26 Juil 2019 10:42
par Moi 1971
Quand tu cliques tu récoltes en même temps des rochers et du bois?

Ton problème ne viens pas de ce code là. Ça vient d'ailleurs. Quel code appel la fonction UpCastle() ?

Plus généralement, il faut aussi que tu comprennes pourquoi on implémente des Setters et des Guetters, appelés "accesseur" .
Pour apprendre : https://docs.microsoft.com/fr-fr/dotnet ... properties
De ce que tu nous montre de ton code, tu n'as pas besoins de les utiliser. C'est faire compliqué quand on peut faire simple.
Alors, à quoi ça sert ? => Permet d'accéder à des variables Private en dehors de leur "portée accessibilité" (ici, la portée de la variable_wood Private est le script car tu l'as définie en début de script)
Pour apprendre : https://openclassrooms.com/fr/courses/1 ... e-variable
Comme le code que tu nous montre accède aux variables de "portée" Private depuis ce même code, ce code n'as pas besoins d'accesseurs! C'est le code qui se trouve en dehors de ce script qui doit utiliser les accesseurs de "portée" Public pour modifier les variables "Private" Bref, j'espère que les liens ci-dessus t'aideront à comprendre le fonctionnement, moi je ne suis pas très pédagogue.

Pour trouver d'où vient ton problème actuel, je te propose temporairement de désactiver les accesseurs (en les mettant en commentaire -> // ) et d'accéder directement à tes variables Private (_wood et _rock) depuis ce code. En faisant comme ça et si tu accèdes depuis l’extérieur à ces variables Private à l'aide des accesseurs, Unity va générer des erreurs et te donner l'endroit exacte où se trouve l'appel à ces accesseurs. Attention : Temporairement l'affichage ne se fera plus...

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DataRessourcesUpdates : MonoBehaviour
{

    private int woodNeedForCastle = 100;
    private int rockNeedForCastle = 100;

    public GameObject cl1;
    public GameObject cl2;
    public GameObject cl3;

    public int Level_Castle = 1;

    private int YcanUpCastle = 1;

    private int woodNeedForForge = 50;
    private int rockNeedForForge = 50;

    public GameObject fl1;
    public GameObject fl2;
    public GameObject fl3;

    public int Level_Forge = 1;

    private int YcanUpForge = 1;

    public Text woodtext;
    public Text rocktext;

    private int _wood = 10000;
    private int _rock = 10000;

    public int RockCollect = 4;
    public int NumberCutRock = 3;
    public GameObject Rock;

    public int WoodCollect = 4;
    public int NumberCut = 3;
    public GameObject Tree;

    //Améliorer le Castle

    public void UpCastle()
    {
        //Améliorer au level 2
        // : /!\if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
         if (_wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            YcanUpCastle = 0;

             // : /!\wood = wood - woodNeedForCastle;
             _wood = _wood - woodNeedForCastle;
             // : /!\rock = rock - rockNeedForCastle;
             _rock = _rock - rockNeedForCastle;

            woodNeedForCastle = 200;
            rockNeedForCastle = 200;

            Level_Castle = 2;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);

            YcanUpForge = 1;

        }

        //Améliorer au level 3
         // : /!\if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
         if (_wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            YcanUpCastle = 0;

             // : /!\wood = wood - woodNeedForCastle;
             _wood = _wood - woodNeedForCastle;
             // : /!\rock = rock - rockNeedForCastle;
             _rock = _rock - rockNeedForCastle;

            woodNeedForCastle = 400;
            rockNeedForCastle = 400;

            Level_Castle = 3;
            print("Château amélioré !");

            cl2.SetActive(false);
            cl3.SetActive(true);

            YcanUpForge = 1;

        }
    }

    //Améliorer la Forge

    public void UpForge()
    {
        //Améliorer au level 2
        // : /!\if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        if (_wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        {

            YcanUpForge = 0;

             // : /!\wood = wood - woodNeedForForge;
             _wood = _wood - woodNeedForForge;
             // : /!\rock = rock - rockNeedForForge;
             _rock = _rock - rockNeedForForge;

            woodNeedForForge = 80;
            rockNeedForForge = 80;

            Level_Forge = 2;
            print("Forge amélioré !");

            fl1.SetActive(false);
            fl2.SetActive(true);

            YcanUpCastle = 1;

        }

        //Améliorer au level 3
        // : /!\if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        if (_wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        {
            YcanUpForge = 0;

            // : /!\wood = wood - woodNeedForForge;
            _wood = _wood - woodNeedForForge;
            // : /!\rock = rock - rockNeedForForge;
            _rock = _rock - rockNeedForForge;

            woodNeedForForge = 120;
            rockNeedForForge = 120;

            Level_Forge = 3;
            print("Forge amélioré !");

            fl2.SetActive(false);
            fl3.SetActive(true);

            YcanUpCastle = 1;

        }
    }

    //Afficher le nombre de ressources
// : /!\
    //private int wood
    //{
    //    get { return _wood; }
    //    set
    //    {
    //        _wood = value;
    //        woodtext.text = "wood : " + _wood.ToString();
     //   }
    //}

   // private int rock
   // {
   //     get { return _rock; }
   //     set
   //     {
   //         _rock = value;
    //        rocktext.text = "rock : " + _rock.ToString();
     //   }
    //}

    public void OnMouseDown()
    {
        if (NumberCutRock != 0)
        {
            // : /!\rock = rock + RockCollect;
            _rock = _rock + RockCollect;
            NumberCutRock = NumberCutRock - 1;
            RockCollect = RockCollect + 3;

            Debug.Log("Ils vous reste " + NumberCutRock);
            Debug.Log("Vous avez récolté " + RockCollect);
        }
        else
        {
            Rock.SetActive(false);
        }


        if (NumberCut != 0)
        {
            // : /!\wood = wood + WoodCollect;
            _wood = _wood + WoodCollect;
            NumberCut = NumberCut - 1;
            WoodCollect = WoodCollect + 3;

            Debug.Log("Ils vous reste " + NumberCut);
            Debug.Log("Vous avez récolté " + WoodCollect);
        }

        else
        {
            Tree.SetActive(false);
        }
    }
}
J'ai pas vérifié le code, j'ai fait un copier-coller et modif directe dans Firefox, il y a peut-être des erreurs...

Re: [DB-AL] Problème pour que mon perso récolte du bois

Publié : 04 Août 2019 19:46
par Platypuss
Bonjour a tous ! Je voulais revenir vers pour vous annoncer que je viens de finir la première partie de mon jeu !

(Bon celle avec le château et la forge, j'ai pas encore trouvé de solution).

Je voulais vous remercier pour toute l'aide que vous m'avez apportée !

Bonne soirée !

Platypuss.