Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.03.2010, 22:17
MrYeti вне форума Посмотреть профиль Отправить личное сообщение для MrYeti Найти все сообщения от MrYeti
  № 11  
Ответить с цитированием
MrYeti

Регистрация: Mar 2009
Сообщений: 37
Это понятно.
Пользователь вводит базис - к примеру 5.
Создается нулевая матрица 6x5;
Как сделать так, чтобы пользователь мог ввести значения в матрицу, если мы не знаем заранее сколько переменных будет всего, а узнаем это только после того, как пользователь определил сколько их? ведь нельзя сделать matrix[1][3]:TextField=new TextField; =). а как надо?

Старый 27.03.2010, 22:59
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 12  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если чесно, я где-то перестал понимать, что вы хотите сделать. Пользователь может ввести значение только в текстовое поле, в матрицу он его никак ввести не может - это может сделать только код написаный вами.
__________________
Hell is the possibility of sanity

Старый 27.03.2010, 23:56
steelcut вне форума Посмотреть профиль Отправить личное сообщение для steelcut Найти все сообщения от steelcut
  № 13  
Ответить с цитированием
steelcut

Регистрация: Mar 2010
Сообщений: 5
MrYeti, я бы сделал так:
Массивов должно быть два - в одном хранятся элементы матрицы, числа, в другом ссылки на текстовые поля.
1. Получаем от пользователя базис.
2. Соответственно, понимаем какое количество переменных нужно создать и становится понятной размерность матрицы. Я не знаю как принимается это решение, но, вероятно, вы знаете как.
3. Создаете в цикле нужное количество текстовых полей (например для 6х5 = 30 полей.)
Позиционируете их, добавляете в дисплейлист, затем ссылки на текстовые поля кладете в массив для текстовых полей.
4. Создайте какую-нибудь кнопку "Ок". Пользователь должен заполнить все поля, а потом нажать "Ок".
5. Когда все поля заполнены и пользователь нажал "Ок" - в цикле перебираем массив с текстовыми полями и читаем из них данные и кладем в ваш массив содержащий элементы матрицы myMatrix.push = Number (myTextFields[i].text). Желательно проверять по ходу дела, что вы читаете, чтобы не было незаполненных полей и т.п.
Массив данных матрицы получается одномерный, но зная размерность матрицы вполне можно вынуть оттуда данные в том порядке как вам надо.
6. Удаляете все текстовые поля воспользовавшись массивом в котором вы сохранили на них ссылки removeChild(myTextFields[i]);
7. Считаете то, что вам надо используя массив с полученными данными myMatrix.
8. Если надо считать снова - повторяете процесс сначала.

Старый 28.03.2010, 00:25
MrYeti вне форума Посмотреть профиль Отправить личное сообщение для MrYeti Найти все сообщения от MrYeti
  № 14  
Ответить с цитированием
MrYeti

Регистрация: Mar 2009
Сообщений: 37
В теории то я тоже так думал, но вот 2 и 3-ий пункты не знаю как реализовать...
Именно как, только что узнав суммарное количество переменных, создать столько же текстовых полей, которые будут ссылками этих переменных?
Кстати можно сделать текстовое поле, в котором можно через запятую можно было бы перечислить элементы массива? Чтобы массив считал введенное значениями, а не текстовой строкой?

Ex:
пользователь введет значение n=3;
появятся 3 строки, характеризующие строки массива.
и в каждую введет что-то вроде:
1, 2, 3, 4
1, 4, 2, 1
2, 4, 2, 2

А в программе такой запрос воспроизвел бы:
matrix[0][0]=1;
matrix[0][1]=2;
matrix[0][2]=3;
matrix[0][3]=4;
matrix[1][0]=1;
matrix[1][1]=4;
...
matrix[m][n]=что-нибудь;

Старый 28.03.2010, 00:47
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 15  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Цитата:
появятся 3 строки, характеризующие строки массива.
и в каждую введет что-то вроде:
Код AS3:
var srt:String // тут наша строка, которую вы задали с переносами строк и всякое такое
 
var rows:Array = str.split('\n'); // разделили строку по символу переноса
while(rows.length) {
   var columnValues:String = rows.shift();
   var columns:Array = columnValues.split(',') // разделили на кусочки по запятой
   while(columns.length) {
      trace('row #'+rows.length+' column #'+columns.length+' value='+columns.shift());
   }
}
И да, я выпил многоь пива, суббота и все такое.
__________________
#flasher@irc.trg.ru:6667


Последний раз редактировалось Obi; 28.03.2010 в 00:54.
Старый 28.03.2010, 01:10
steelcut вне форума Посмотреть профиль Отправить личное сообщение для steelcut Найти все сообщения от steelcut
  № 16  
Ответить с цитированием
steelcut

Регистрация: Mar 2010
Сообщений: 5
по п.2 Мне кажется что зависимость такая:
Код AS3:
n // сюда вы кладете то что ввел пользователь
var xnum:int = n+1;//число элементов по горизонтали
var ynum:int = n;//число элементов по вертикали
var totalNum:int = xnum * ynum; //общее число переменных
т.е. при n = 3 -> 4 *3 = 12
n = 5 -> 6 * 5 = 30
Оно?

по п.3:
Код AS3:
for (var i:int=0; i < totalNum; i++){
var tf:TextField = new TextField(); tf.type = TextFieldType.INPUT; tf.x = 10 + 70 * (i - Math.floor(i/xnum) * xnum); tf.y = 50 + 40 * Math.floor(i/xnum); addChild(tf); myTFields.push(tf);
}

Старый 28.03.2010, 18:48
MrYeti вне форума Посмотреть профиль Отправить личное сообщение для MrYeti Найти все сообщения от MrYeti
  № 17  
Ответить с цитированием
MrYeti

Регистрация: Mar 2009
Сообщений: 37
Так можно создать текстовые поля, но их идентификатор будет 1 tf, так что не получится.
Сейчас пробую как Obi предложил. Вродь должно получиться...

Старый 28.03.2010, 19:04
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 18  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
Цитата:
Сообщение от MrYeti Посмотреть сообщение
В теории то я тоже так думал, но вот 2 и 3-ий пункты не знаю как реализовать...
Именно как, только что узнав суммарное количество переменных, создать столько же текстовых полей, которые будут ссылками этих переменных?
а кто мешает создавать переменные программно ?
вопрос, на сколько я понял, не в том, как их создавать, а в том, как к ним потом обращаться. предлагаю способ, когда каждый элемент вашей матрицы будет помещен в объект Object, который мы снабдим парой свойств i и j - координатами (для случая двумерной матрицы) и текстовым полем для ввода значения

Код AS3:
var matrix : array = new Array(); // массив будет содержать все элементы матрицы вне зависимости от размерности
 
 
var singleElement : Object = new Object(); // объект элемента матрицы
var elementInput : TextField = new TextField(); // текстовое поле для ввода значения элемента
 
singleElement.i = ... // присваиваем горизонтальный индекс элементу матрицы (например, равный счетчику соответствующего цикла
singleElement.j = ... // вертикальный идекс
singleElement.input = elementInmput; //
singleElement.input.x = ... // позиционируем текстовое поле
singleElement.input.y = ... // позиционируем текстовое поле
addChild(singleElement.input) // вводим его в список отображения
 
matrix.push(singleElement); // "складируем" элемент матрицы в линейный массив
дальше обращайтесь к любому элементу по его координатам в матрице, предварительно отыскав его в линейном массиве по условию singleElement.i = that_i && singleElement.j = that_j, где that_ - искомые индексы элемента.

линейный массив будет удобен, поскольку изначально размерность вашей матрицы неизвестна. каждый элемент линейного массива хранит в себе его координаты в вашей матрице (i,j) и текстовое поле для ввода значения


вообще, как мне кажется, лучше использовать универсальную схему, которой пофигу размерность. для ввода значений использовать одно текстовое поле и несколько полей для ввода координаты элемента матрицы. целевой Object в который мы будем складывать все, будем хранить координату элемента. А все объекты будем складывать в линейный массив, чтобы потом иметь возможность работать с любым из элементов матрицы. такая схема будет эластичной , хотя и не очень быстрой при больших размерностях. зато универсальной

Старый 31.03.2010, 00:57
Elser вне форума Посмотреть профиль Отправить личное сообщение для Elser Найти все сообщения от Elser
  № 19  
Ответить с цитированием
Elser
 
Аватар для Elser

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
Код AS3:
var matrix:Array = new Array();
var columns:uint = 3;
var rows:uint = 3;
for(var i = 0; i<=rows+1; i++){
    matrix.push(new Array());
    for(var j = 0; j<=columns; j++){
        var tf:TextField = new TextField();
        tf.type = TextFieldType.INPUT;
        tf.width = 40;
        tf.height = 24;
        tf.x = (j==0) ? 15 : matrix[i][j-1].x + 40 + 5; 
        // x всей матрицы если первый элемент или 
        // x предыдущего поля + ширина предыдущего + интервал
        tf.y = (i==0) ? 15 : matrix[i-1][j].y + 24 + 5;
        //аналогично для y
        matrix[i].push(tf);
        addChild(matrix[i][j]);
    }
}
................
for(i in matrix){
    for(j in matrix[i]){
        trace(matrix[i][j].text);
    }
}
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


Последний раз редактировалось Elser; 31.03.2010 в 01:13.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:17.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.