Переменные, созданные вне Update () - PullRequest
0 голосов
/ 08 декабря 2018

Давайте представим, что у меня есть существо, которое движется:

        bool pathFound = false;
        void Update()
        {
            if(!pathFound)
            {
                //Find a destination point
                pathFound = true;
            }

            //Move creature to point

            if(Creature reached the point)
            {
                pathFound = false;
            }
        }

Так что движение зависит от переменной, созданной вне функции.
Если я хочу добавить точно такое же второе существо, кодсобирается быть дублированным:

        bool pathFound1 = false;
        bool pathFound2 = false;
        void Update()
        {
            if(!pathFound1)
            {
                //Find a destination point 1
                pathFound1 = true;
            }
            //Move creature 1 to point 1
            if(Creature reached the point 1)
            {
                pathFound1 = false;
            }

            if(!pathFound2)
            {
                //Find a destination point 2
                pathFound2 = true;
            }
            //Move creature 2 to point 2
            if(Creature2 reached the point 2)
            {
                pathFound2 = false;
            }
        }

Что выглядит очень странным и неэффективным для меня.И даже если я перенесу все эти шаги в функцию, должны быть созданы две почти одинаковые функции с разницей в pathFound1 и pathFound2.
Поэтому мне интересно, как добиться того же результата с более качественным кодом?

1 Ответ

0 голосов
/ 08 декабря 2018

Поместить логическое значение pathFound в качестве члена public в Creature со значением по умолчанию, инициализированным false.

Тогда вы можете иметь:

void Update()
    {
        foreach (Creature creature in yourCreaturesList)
        {
            if (creature.PathFound)
            {
                //Find a destination point for creature
                creature.PathFound = true;
            }

            //Move creature to its target point
            if(creature reached the point)
            {
                creature.PathFound = false;
            }
        }
    }

При необходимости инкапсулировать и другие параметры внутри класса Существо.

...