3D массив?

Общие вопросы о Unity3D

3D массив?

Сообщение yura415 28 мар 2012, 18:04

Собственно, как сделать массив с 2D массивами?))
То есть у меня есть класс Figure, в котором есть переменная matrix (public bool[,] matrix = new bool[4,4]).
Так же есть функция ConstructFigures
Синтаксис:
Используется csharp
void ConstructFigures () {
                figures[0].matrix[0,0] = true;
                figures[0].matrix[1,0] = true;
                figures[0].matrix[2,0] = true;
                figures[0].matrix[3,0] = true;
               
                figures[1].matrix[0,0] = true;
                figures[1].matrix[0,1] = true;
                figures[1].matrix[0,2] = true;
                figures[1].matrix[0,3] = true;
...
               

figures - это массив из Figure (List<Figure> figures = new List<Figure>(19)). Пробовал и built-in массивы (Figure[]) и вообще опирался на это - http://robotduck.wordpress.com/2009/11/04/88/
Но когда пытаюсь запустить, пишет
Синтаксис:
  1. ArgumentOutOfRangeException: Argument is out of range. 
  2. Parameter name: index 
  3. System.Collections.Generic.List`1[Figure].get_Item (Int32 index) 
  4. Gen.ConstructFigures () (at Assets/Gen.cs:57) 
  5. Gen+<Start>c__Iterator0.MoveNext () (at Assets/Gen.cs:54) 
при массиве через List<> и NullReferenceException при built-in массиве.
[curved_hands] [curved_hands]
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: 3D массив?

Сообщение waruiyume 28 мар 2012, 18:28

http://msdn.microsoft.com/ru-ru/library/2s05feca.aspx
ИМХО: Это- самый простой способ заработать геморрой :D
Синтаксис:
Используется csharp
int[][, ,][] nested = new int[1][, ,][];
nested[0]=new int[10,10,10][];
nested[0][0, 0, 0] = new int[10];
nested[0][0, 0, 0][0] = 3;
Debug.Log(nested[0][0, 0, 0][0]);
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: 3D массив?

Сообщение seaman 28 мар 2012, 19:15

Собственно, а вы значения элементам figures то присваивали? Определить List из 19 элементов, это не значит присвоить им дефолтные значения. Это значить зарезервировать место под 19 элементов. Пока Вы напрямую не добавите значения в List, он будет пустой. И при попытке взять из него что-то будет ошибка индекса.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: 3D массив?

Сообщение yura415 28 мар 2012, 20:25

seaman писал(а):Собственно, а вы значения элементам figures то присваивали? Определить List из 19 элементов, это не значит присвоить им дефолтные значения. Это значить зарезервировать место под 19 элементов. Пока Вы напрямую не добавите значения в List, он будет пустой. И при попытке взять из него что-то будет ошибка индекса.

хм, Figure - это просто класс:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Figure{
        public bool[,] matrix = new bool[4,4];
}

То есть нужно для каждой свободной ячейки создать new Figure()?
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: 3D массив?

Сообщение seaman 28 мар 2012, 21:28

Собственно при чем тут класс Figure. Речь о List. А что в нем совершенно не важно.
Этим
List<Figure> figures = new List<Figure>(19)
Вы его просто определили и зарезервировали под 19 элементов память. А собственно где Вы определяете сами элементы? Если хоть что-то не добавить в List - он будет пустой.
figures[i] = new Figure();
Но лучше не указывать 19 элементов и использовать figures.Add(new Figure());
Для всех необходимых элементов этого figures.

Почитайте про List:
http://msdn.microsoft.com/ru-ru/library/6sh2ey19.aspx
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10