Вычисление двухмерного массива

Программирование на Юнити.

Вычисление двухмерного массива

Сообщение artas-7 25 апр 2011, 20:03

Добрый день. Вот уперся в двухмерный массив. В итоге должно получиться следующее: отображение нескольких кнопок, каждой из них присвоена своя текстура, при нажатии на кнопку меняется текстура на объекте.
Массив написал, как линейный он работает, пытаюсь его переделать для двухмерного, чтобы кнопки отображались по двум осям, а не только по одной.
Пытался добавить еще одну переменную, в коде это k... но в итоге ничего не отображается.
Подскажите пожалуйста где может быть ошибка?

Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class example: MonoBehaviour {
static int Count = 4;
int k = 0;     
int Counti = 2;
int Countj = 2;
public Texture[] vec = new Texture[Count];
bool[] vb = new bool [Count];
public GameObject down01;
public Texture SPF6901;
public Texture SPF6902;
public Texture SPF6903;
public Texture SPF6904;
public Texture SPF6905;

void OnGUI()
{
vec[0] = SPF6901;
vec[1] = SPF6902;
vec[2] = SPF6903;
vec[3] = SPF6904;
vec[4] = SPF6905;

k=0;   
        for(int i=0; i < Counti; i++){
        for(int j=0; j < Countj; j++){

if (GUI.Button(new Rect(10+15*j, 10 + 10*i, 30, 30), vec[k]))
vb[k]=!vb[k];
k++;
}
}
k=0;
        for(int i=0; i < Counti; i++){
        for(int j=0; j < Countj; j++){
if (vb[k]) {
down01.GetComponent<MeshRenderer>().material.mainTexture = vec[k];
vb[k]=!vb[k];
k++;
}
}
}
}
}

 
Аватара пользователя
artas-7
UNец
 
Сообщения: 19
Зарегистрирован: 16 янв 2011, 22:50
Откуда: Ryazan
  • ICQ

Re: Вычисление двухмерного массива

Сообщение Paul Siberdt 25 апр 2011, 20:13

А почему бы не пользовать массив из Vector2, раз нужно два значения? Зачем пользовать двумерный?
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Вычисление двухмерного массива

Сообщение waruiyume 25 апр 2011, 20:42

А в консоль западло смотреть?
Скрытый текст:
IndexOutOfRangeException: Array index is out of range.
(wrapper stelemref) object:stelemref (object,intptr,object)
example.OnGUI () (at Assets/example.cs:29)

Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class example: MonoBehaviour {
static int Count = 5;/////////было 4
int k = 0;    
int Counti = 2;
int Countj = 2;
//public Texture[] vec = new Texture[Count];
        Texture[] vec = new Texture[Count];
bool[] vb = new bool [Count];
public GameObject down01;
public Texture SPF6901;
public Texture SPF6902;
public Texture SPF6903;
public Texture SPF6904;
public Texture SPF6905;
void OnGUI()
{
        vec[0] = SPF6901;
        vec[1] = SPF6902;
        vec[2] = SPF6903;
        vec[3] = SPF6904;
        vec[4] = SPF6905;

        k=0;  
        for(int i=0; i < Counti; i++)
        {
                for(int j=0; j < Countj; j++)
                {
                        if (GUI.Button(new Rect(10+15*j, 10 + 10*i, 30, 30), vec[k]))
                        vb[k]=!vb[k];
                        k++;
                }
        }
        k=0;
        for(int i=0; i < Counti; i++)
        {
                for(int j=0; j < Countj; j++)
                {
                        if (vb[k])
                        {
                                down01.GetComponent<MeshRenderer>().material.mainTexture = vec[k];
                                vb[k]=!vb[k];
                                k++;
                        }
                }
        }
}
}
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Вычисление двухмерного массива

Сообщение Golandez 25 апр 2011, 20:45

Не понятно как он будет двухмерным,если вы его таковым не обьявили и зачем инициализация в OnGUI ?
P.S. waruiyume +1.Не заметил сразу.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Вычисление двухмерного массива

Сообщение Paul Siberdt 25 апр 2011, 20:58

А... я про вектора, а тут ж массив текстурный. :D
Все равно ничто не мешает пользовать одномерный массив, увеличив число ячеек вдвое, или выдумать свой класс:

Код: Выделить всё
class cButton{
var tex1 : Texture;
var tex2 : Texture;
}
var buttons : cButton[];

Многомерные массивы - это большая какашка, на которой поскальзываешься в самый неподходящий момент и, как правило, падаешь в нее исключительно физиономией. :D
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Вычисление двухмерного массива

Сообщение artas-7 25 апр 2011, 21:14

да действительно
static int Count = 5;
не заметил...
теперь все работает.
но вот какая другая проблема.
он выводит кнопки, но не каждую отдельную, а просто их дублирует по осям. создает их копии всего лишь, а мне хочется чтобы создавал новую колонку с кнопками...
Аватара пользователя
artas-7
UNец
 
Сообщения: 19
Зарегистрирован: 16 янв 2011, 22:50
Откуда: Ryazan
  • ICQ

Re: Вычисление двухмерного массива

Сообщение Golandez 25 апр 2011, 21:25

Вы продублировали одно событие на все ячейки.Чего же вы тогда хотите? Сделайте для каждой ячейки свое событие.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Вычисление двухмерного массива

Сообщение artas-7 25 апр 2011, 21:29

в том то и проблема.
до этого было много много кнопок...
но их примерно 1000, возникла проблема с их размещением по координатам, сегодня стал упрощать, сделал вот такой массив,
массив работает по одной оси, либо по горизонтали, либо по вертикали, что в принципе упростило работу в разы, теперь хочу сделать еще проще, чтобы этот массив размещал кнопки не по одной оси, а по двум...
вот последнее догнать никак не могу...
Аватара пользователя
artas-7
UNец
 
Сообщения: 19
Зарегистрирован: 16 янв 2011, 22:50
Откуда: Ryazan
  • ICQ

Re: Вычисление двухмерного массива

Сообщение Zaicheg 25 апр 2011, 22:17

В будущем за такое форматирование кода (как в первом сообщении темы) будут выдаваться предупреждения и баны.

Надо так (на мелких разрешениях в браузере может выглядеть не весело, но при переносе в VS или Notepad получаем нормальный код, в некоторых случаях даже с табуляциями). Форматировал при помощи Visual Studio, с галочкой "Keep tabs" и функцией автоформата (Ctrl + E → D):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour
{
        static int Count = 4;
        int k = 0;
        int Counti = 2;
        int Countj = 2;
        public Texture[] vec = new Texture[Count];
        bool[] vb = new bool[Count];
        public GameObject down01;
        public Texture SPF6901;
        public Texture SPF6902;
        public Texture SPF6903;
        public Texture SPF6904;
        public Texture SPF6905;

        void OnGUI()
        {
                vec[0] = SPF6901;
                vec[1] = SPF6902;
                vec[2] = SPF6903;
                vec[3] = SPF6904;
                vec[4] = SPF6905;

                k = 0;
                for (int i = 0; i < Counti; i++)
                {
                        for (int j = 0; j < Countj; j++)
                        {

                                if (GUI.Button(new Rect(10 + 15 * j, 10 + 10 * i, 30, 30), vec[k]))
                                        vb[k] = !vb[k];
                                k++;
                        }
                }
                k = 0;
                for (int i = 0; i < Counti; i++)
                {
                        for (int j = 0; j < Countj; j++)
                        {
                                if (vb[k])
                                {
                                        down01.GetComponent<MeshRenderer>().material.mainTexture = vec[k];
                                        vb[k] = !vb[k];
                                        k++;
                                }
                        }
                }
        }
}
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Вычисление двухмерного массива

Сообщение Order 26 апр 2011, 04:23

А чего бы не сделать класс ячейки в котором будет содержание, текстуры, координаты на экране и прочее и затолкать его в одномерный массив.
При выведении пересчитывать координаты ячейки с учетом положения сумки и разрешений экрана.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34


Вернуться в Скрипты

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

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