Вторник, 26 Ноября 2024, 10:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поиск количества true в массиве в update
polousДата: Среда, 03 Сентября 2014, 22:27 | Сообщение # 1
частый гость
Сейчас нет на сайте
Ребята, чую, что очень нубский вопрос, но как-то не догоняю, как его решить smile Поможете?
Есть boolen массив с постоянным количеством элементов. В зависимости от различных условий в этом массиве в риалтайм изменяются значения элементов. Мне нужно знать в каждый момент времени сколько в этом массиве элементов с true. Я в update бегу по всем элементам массива и при условии, что элемент == true, инкрементирую переменную i, но i бесконечно растет, т.к. возврат из метода происходит только, когда все элементы == false....

void Update() {
foreach (GameObject a in array) {
if (a == true) {
i++;
}
else {
return;
}
}
}

Как правильно организовать поиск количества true в array?


Сообщение отредактировал polous - Среда, 03 Сентября 2014, 22:28
SaiteiДата: Среда, 03 Сентября 2014, 22:32 | Сообщение # 2
старожил
Сейчас нет на сайте
в C++ сделал бы так:

int Some(int *mas, int size)
{
int a = 0;
for(int i = 0; i < size; i++)
{
if(mas[i] == true)
{
a++;
}
}
return a;
}
polousДата: Среда, 03 Сентября 2014, 22:43 | Сообщение # 3
частый гость
Сейчас нет на сайте
Спасибо, сейчас попробую циклом for вместо foreach. По крайней мере в for есть понятный выход по достижению длины массива.

Сообщение отредактировал polous - Среда, 03 Сентября 2014, 22:43
HPlusDieseДата: Среда, 03 Сентября 2014, 22:45 | Сообщение # 4
участник
Сейчас нет на сайте
Корректный с точки зрения C# код.
Код
         bool[] Array = new bool[ 10 ];
           int counter = 0;

           void Update( )
               {
               foreach( bool val in Array )
                   {
                   if( val )
                       counter++;
                   }
         //Делаешь свои дела тут и обнуляй счётчик.
             counter = 0;
               }

Расти переменная будет всегда, т.к. ты её не обнуляешь. А Update вызывается 30(или сколько там в юнити) раз в секунду.


Сообщение отредактировал HPlusDiese - Среда, 03 Сентября 2014, 22:47
LertmindДата: Среда, 03 Сентября 2014, 22:51 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Вообще у тебя проблема с логикой приложения, обычно нет смысла так делать.

Но если тебе так хочется:
Код
public class Test : MonoBehaviour
{
     bool array = new bool[10];
     int count = 0;

     void Update()
     {
         int count = 0;
         foreach (bool val in array)
         {
             if (val) count++;
         }

         // Используешь переменную count
         // ...
     }
}
polousДата: Среда, 03 Сентября 2014, 23:01 | Сообщение # 6
частый гость
Сейчас нет на сайте
Да, все нормально теперь рассчитывает. Благодарю за помощь, Saitei.

На C#
int AmountOfEnemies() {
aoe = 0;
for (int k = 0; k < enemies.Length; k++) {
if (enemies[k].GetComponent<FindEnemies>().Visibility_plr[selectedPlayer.GetComponent<Player>().indexinmassive] == true) {
aoe++;
}
}
return noe;
}

Добавлено (03.09.2014, 22:58)
---------------------------------------------
Пока писал код, уже куча ответов написали) Спасибо, я понял, что дело было в обнулении переменной, т.к. и с for, и c foreach все прекрасно работает. Еще раз всем спасибо!

Добавлено (03.09.2014, 23:01)
---------------------------------------------
это с foreach

int AmountOfEnemies() {
noe = 0;
foreach (GameObject e in enemies) {
if (e.GetComponent<FindEnemies>().Visibility_plr[selectedPlayer.GetComponent<Player>().indexinmassive] == true) {
noe++;
}
}
return noe;
}

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг