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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.11.2012, 20:12
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 1  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Tools Случайная генерация значения двумерного массива

Обратите внимание на два варианта скрипта, в них собственно и вопрос
Код AS3:
for(var i:int = 0; i < 21; i++){
				for(var i2:int = 0; i2 < 29; i2++){
					var perem:Number = Math.random();
					if(perem > 0.7){
						var some:Enemy = new Enemy();
						trace(i  + " " + i2 + "\n");
						mama[i][i2].push(true); //ПОЧЕМУ ТАК НЕ РАБОТАЕТ?
						//mama[i2].push(some);//ОДНАКО В УЧЕБНИКАХ СИЕ ИСПОЛЬЗУЕТСЯ!
					}
				}
			}
Рабочий вариант до которого еле додумался.
Код AS3:
for(var i:int = 0; i < 21; i++){
				for(var i2:int = 0; i2 < 29; i2++){
					var perem:Number = Math.random();
					if(perem > 0.7){
						var some:Enemy = new Enemy();
						trace(i  + " " + i2 + "\n");
						mama[i][i2] = true;
						//mama[i2].push(some);
					}
				}
			}
ЗЫ мама - это массив (ну как бы с детками :3)

Старый 25.11.2012, 20:16
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Массив таки ДВУ-мерный или всетаки ТРЕХ-мерный?
push это метод массива. У Вас mama это массив, mama[i] это массив, mama[i][i2] — тоже массив?
Что тогда означает код mama[i][i2] = true; ?
__________________
Reality.getBounds(this);

Старый 25.11.2012, 20:19
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 3  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Массив таки ДВУ-мерный или всетаки ТРЕХ-мерный?
push это метод массива. У Вас mama это массив, mama[i] это массив, mama[i][i2] — тоже массив?
Что тогда означает код mama[i][i2] = true; ?
Двумерный массив, то есть внутри каждого элемента i есть массив.
Код AS3:
//Build Massive
			var mama:Array = new Array(20);
			for(var j:int = 0; j < 21; j++){
				mama[j] = new Array(29);
			}
Код:
Что тогда означает код mama[i][i2] = true; ?
Я имею ввиду тут, что элементу i2 внутри массива i, присваивается значение true

Старый 25.11.2012, 20:21
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 4  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Запись
Код AS3:
mama[i][i2].push(true);
означает, что это трехмерный массив. Считайте внимательно
Код AS3:
mama.push(true); #одномерный
mama[i].push(true); #двухмерный
mama[i][i2].push(true);  #трехмерный.
Поэтому и не работает.

Старый 25.11.2012, 20:25
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Соответственно Вы можете вызвать метод push у этих массивов mama[j].
Но если Вы записываете туда Boolean (т.е. true или false), то как Вы собираетесь вызывать у них метод push?
Код AS3:
mama[i][i2] = true;
mama[i][i2].push(someVar); // т.е. " (true).push(someVar); "
mama[i][i2] это уже ячейка вложенного массива. А точнее — ее содержимое (в вашем случае true).
__________________
Reality.getBounds(this);

Старый 25.11.2012, 20:25
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 6  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от Krusty Посмотреть сообщение
Запись
Код AS3:
mama[i][i2].push(true);
означает, что это трехмерный массив. Считайте внимательно
Код AS3:
mama.push(true); #одномерный
mama[i].push(true); #двухмерный
mama[i][i2].push(true);  #трехмерный.
Поэтому и не работает.
mama[i].push(true); #двухмерный -- Если таким образом заполнить массив, то все элементы i2 примут значение true, как этого избежать?
То есть как реализовать
Код:
mama[i][i2] = true;
использую push(); ?

Старый 25.11.2012, 20:30
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 7  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
push добавляет элемент без использования индекса, он просто добавляет элемент за последним.
Цитата:
Если таким образом заполнить массив, то все элементы i2 примут значение true, как этого избежать?
Вы не понимаете? i2 меняется в цикле. переформулируйте задачу.

Старый 25.11.2012, 20:34
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
То есть как реализовать mama[i][i2] = true; использую push(); ?
Код AS3:
mama[i].push(true);
__________________
Reality.getBounds(this);

Старый 25.11.2012, 20:37
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 9  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от Krusty Посмотреть сообщение
push добавляет элемент без использования индекса, он просто добавляет элемент за последним.

Вы не понимаете? i2 меняется в цикле. переформулируйте задачу.
Вариант 1
Код AS3:
for(var i:int = 0; i < 20; i++){
				for(var i2:int = 0; i2 < 27; i2++){
					var perem:Number = Math.random();
					if(perem > 0.7){
						mama[i].push(true);
                                                trace(i + "\n");
					}
				}
			}
трейс
Код:
1 true
1 true
1 true
..
2 ..
2 ..
2 ..
..
3 ..
3 ..
3 ..
..
4 true
4 true
4 true
...
вариант 2
Код AS3:
for(var i:int = 0; i < 20; i++){
				for(var i2:int = 0; i2 < 27; i2++){
					var perem:Number = Math.random();
					if(perem > 0.7){
						mama[i][i2] = true;
                                                trace(i + "\n");
					}
				}
			}
трейс
Код:
1 true
1 ..
1 true
..
2 ..
2 true
2 true
..
3 true
3 ..
3 ..
..
4 true
4 ..
4 true
..
Бишь рандом значение ...повторюсь как реализовать последнее используя push(); - чтобы результат был сходным. как при использовании mama[i][i2] = true; (Каждому элементу второго , вложенного массива, было присвоено индивидуальное значение

Старый 25.11.2012, 20:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы читаете, что Вам пишут? (ладно хелп не читаете, это ваше дело).
push() добавляет элемент в конец массива. Ему нет дела до того, какое сейчас значение у переменной-итератора цикла i2. Если Вы не делаете push() (а Вы не делаете, когда рэндом не больше 0.7), то ничего и не добавляется. Ничего — означает "и ячейки тоже". Сама собой пустая ячейка не возникнет, флэш не умеет читать Ваши желания. Либо полностью комплектуйте массив ячейками и значениями, либо используйте оператор = (не понимаю, чем Вас это не устраивает).
Код AS3:
for(var i:int = 0; i < 20; i++){
	for(var i2:int = 0; i2 < 27; i2++){
		var perem:Number = Math.random();
		if(perem > 0.7){
			mama[i].push(true);
		}
		else{
			mama[i].push(false);
		} 
		trace(i, i2, mama[i][i2]);
	}
}
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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