[Решено] Массивы - Форум Игроделов
Чт, 31 Июл 2025, 04:50 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Решено] Массивы
wolfnessДата: Пн, 07 Янв 2013, 17:28 | Сообщение # 1
Нет аватара
 
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Offline
Добрый день.
Вопрос дилетантский, но все же.
Объявляю массив: cur_point
Код
   
const int mass_point = 4;
int[] zeroes = new int[mass_point];
int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};

где элементы массива cur_point получаются из 4 других скриптов (их значения 1,0,0,1). При выводе всех
Код
rise.curpoint
в консоль, их значения в данный скрипт передаются правильно, но
если я пытаюсь обратиться к ним вот так:
Код
       
   void Update ()   
   {
    if(globalvars.gl_ai == 1)
    {
     int k = 0;
     for(int i = 0; i < cur_point.Length; i++)
     {
      if(cur_point[i] == 0)
      {
       zeroes[k] = i + 1;
       Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2);
       k++;
      }
         
     }
     /*for (int j = 1; j <= mass_point; j++)
              {
                    
                  if (zeroes[j-1] > max)   
      {
       max = zeroes[j-1];
       Debug.Log(max);
      }   
              }*/
     globalvars.gl_ai = 0;
    }
   }
}

В выводе
Код
    Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2);
значение
Код
rise2.curpoint2
выводится правильно, а вот в
Код
cur_point[i]
все время получаю нули. И проблему понять не могу. По мануалам вроде бы правильно обращаюсь к элементам массива.


Сообщение отредактировал wolfness - Вт, 08 Янв 2013, 10:49
 
СообщениеДобрый день.
Вопрос дилетантский, но все же.
Объявляю массив: cur_point
Код
   
const int mass_point = 4;
int[] zeroes = new int[mass_point];
int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};

где элементы массива cur_point получаются из 4 других скриптов (их значения 1,0,0,1). При выводе всех
Код
rise.curpoint
в консоль, их значения в данный скрипт передаются правильно, но
если я пытаюсь обратиться к ним вот так:
Код
       
   void Update ()   
   {
    if(globalvars.gl_ai == 1)
    {
     int k = 0;
     for(int i = 0; i < cur_point.Length; i++)
     {
      if(cur_point[i] == 0)
      {
       zeroes[k] = i + 1;
       Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2);
       k++;
      }
         
     }
     /*for (int j = 1; j <= mass_point; j++)
              {
                    
                  if (zeroes[j-1] > max)   
      {
       max = zeroes[j-1];
       Debug.Log(max);
      }   
              }*/
     globalvars.gl_ai = 0;
    }
   }
}

В выводе
Код
    Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2);
значение
Код
rise2.curpoint2
выводится правильно, а вот в
Код
cur_point[i]
все время получаю нули. И проблему понять не могу. По мануалам вроде бы правильно обращаюсь к элементам массива.

Автор - wolfness
Дата добавления - 07 Янв 2013 в 17:28
seamanДата: Пн, 07 Янв 2013, 18:04 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};
Эта строка в Start/Awake, или прямо в теле класса?
Если да - разбейте ее на две:
int[] cur_point; //в теле класса
Код
...
cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
 
Сообщениеint[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};
Эта строка в Start/Awake, или прямо в теле класса?
Если да - разбейте ее на две:
int[] cur_point; //в теле класса
Код
...
cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start

Автор - seaman
Дата добавления - 07 Янв 2013 в 18:04
wolfnessДата: Пн, 07 Янв 2013, 18:18 | Сообщение # 3
Нет аватара
 
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Offline
Цитата (seaman)
Эта строка в Start/Awake, или прямо в теле класса?

Прямо в теле класса.

Цитата (wolfness)
Если да - разбейте ее на две:

оставляю
Код

int[] cur_point;
в теле класса, а в Start помещаю
Код
    void Start ()   
   {
    int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};
   }

В результате получаю NullReferenceException: Object reference not set to an instance of an object
ai.Update () (at Assets/Scripts/ai.cs:26)
А в 26 строке у меня
Код
   for(int i = 0; i < cur_point.Length; i++)

если я в старт помещаю точно так же как вы советуете:
Код
cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start

то получаю error CS1525: Unexpected symbol `{'


Сообщение отредактировал wolfness - Пн, 07 Янв 2013, 18:22
 
Сообщение
Цитата (seaman)
Эта строка в Start/Awake, или прямо в теле класса?

Прямо в теле класса.

Цитата (wolfness)
Если да - разбейте ее на две:

оставляю
Код

int[] cur_point;
в теле класса, а в Start помещаю
Код
    void Start ()   
   {
    int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};
   }

В результате получаю NullReferenceException: Object reference not set to an instance of an object
ai.Update () (at Assets/Scripts/ai.cs:26)
А в 26 строке у меня
Код
   for(int i = 0; i < cur_point.Length; i++)

если я в старт помещаю точно так же как вы советуете:
Код
cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start

то получаю error CS1525: Unexpected symbol `{'

Автор - wolfness
Дата добавления - 07 Янв 2013 в 18:18
seamanДата: Пн, 07 Янв 2013, 19:02 | Сообщение # 4
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Ну да, ступил.
В-общем как я понимаю смысл в том, что строка помещенная в теле класса выполняется в статическом конструкторе. Тогда Ваши rise... не определены и по умолчанию заносится 0. Как избежать?- переместить назначение элементов массива в Start. Только,конечно не так как я написал.
Код
int[] cur_point; //в теле класса
...
  cur_point = new int[] {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start

Или так
Код
int[] cur_point = new int[4]; //в теле класса
...
cur_point[0] = rise1.curpoint1;//В Start
cur_point[1] = rise2.curpoint2;
cur_point[2] = rise3.curpoint3;
cur_point[3] = rise4.curpoint4;
 
СообщениеНу да, ступил.
В-общем как я понимаю смысл в том, что строка помещенная в теле класса выполняется в статическом конструкторе. Тогда Ваши rise... не определены и по умолчанию заносится 0. Как избежать?- переместить назначение элементов массива в Start. Только,конечно не так как я написал.
Код
int[] cur_point; //в теле класса
...
  cur_point = new int[] {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start

Или так
Код
int[] cur_point = new int[4]; //в теле класса
...
cur_point[0] = rise1.curpoint1;//В Start
cur_point[1] = rise2.curpoint2;
cur_point[2] = rise3.curpoint3;
cur_point[3] = rise4.curpoint4;

Автор - seaman
Дата добавления - 07 Янв 2013 в 19:02
wolfnessДата: Пн, 07 Янв 2013, 21:05 | Сообщение # 5
Нет аватара
 
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Offline
Спасибо большое, разобрался. Только я то, что у вас помещено в Start, я поместил в Update, потому что значения rise.curpoint у меня постоянно меняются. Самое главное, что с массивами разобрался. Еще раз спасибо. Все заработало, как надо.
 
СообщениеСпасибо большое, разобрался. Только я то, что у вас помещено в Start, я поместил в Update, потому что значения rise.curpoint у меня постоянно меняются. Самое главное, что с массивами разобрался. Еще раз спасибо. Все заработало, как надо.

Автор - wolfness
Дата добавления - 07 Янв 2013 в 21:05
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025