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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.01.2014, 13:32
Termin вне форума Посмотреть профиль Отправить личное сообщение для Termin Найти все сообщения от Termin
  № 1  
Ответить с цитированием
Termin
 
Аватар для Termin

Регистрация: Sep 2006
Сообщений: 111
По умолчанию добавляются на сцену не все обьекты

В общем если бы не правила форума, назвал бы темуПомогите определить идиот ли я или нет? В общем поставил себе задачу детсадовскую, написать детсадовский алгоритм, матричного расположения объектов на сцене. Например в конкретном примере 9 квадратиков в 3 ряда и столбца.

Код AS3:
import flash.events.MouseEvent;
import flash.events.Event;
 
var Mass:Array = new Array();
var MassRed:Array = [];
 
for (var i:int=0; i<3; i++)
{
	MassRed.push(Mass);         //Собстна добавляем массив в массив 
	for (var j:int=0; j<3; j++)
	{
		var t:Cube = new Cube();// этот квадратик я нарисовал во Flash
		Mass.push(t); // Добавляем объекты в массив
		MassRed[i][j].x = MassRed[i][j].width + 35 * j; //Определяем координаты каждого из квадратиков по x
		MassRed[i][j].y = MassRed[i][j].width + 35 * i; //Определяем координаты каждого из квадратиков по y
		stage.addChild(MassRed[i][j]); // Добавляем элементы на сцену;
	}
}
проще некуда, а на экране видны только 3 последних распределения т.е. 3 квадрата в ряд.
причем если мы напишим:
Код AS3:
trace("По Х координате=",MassRed[i][j].x);
		trace("По Y координате=",MassRed[i][j].y);
		trace(MassRed[i][j]);
то выведиться:
По Х координате= 31
По Y координате= 31
[object Cube]
По Х координате= 66
По Y координате= 31
[object Cube]
По Х координате= 101
По Y координате= 31
[object Cube]
По Х координате= 31
По Y координате= 66
[object Cube]
По Х координате= 66
По Y координате= 66
[object Cube]
По Х координате= 101
По Y координате= 66
[object Cube]
По Х координате= 31
По Y координате= 101
[object Cube]
По Х координате= 66
По Y координате= 101
[object Cube]
По Х координате= 101
По Y координате= 101
[object Cube]

Т.е. определение координат всех 9-ти элементов массива. а добавляется только 3 последних ну или все 3 ряда в одну строчку.. Что не логично по коду и функции trace мы видим что координаты абсолютно разные для всех элементов массива... ХМ...

Добавлено через 4 минуты
Код AS3:
 trace(stage.numChildren)//выводит 4 ХЗ почему?

Старый 31.01.2014, 13:54
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Прочтя вопрос, подумал что знаю ответ, но для начала решил проверить.
И теперь у меня тоже вопрос - ниже код, который как и ожидалось проводит только три итерации, но вот что внутри.. Трейс для parentArray :
Длина - 2, 3, 4.
Кол-во спрайтов - 2, 6, 8. Почему так? В начале вопрос ТС мне казался простым, так-как думал что причина в том, что вкладываемый массив не создаётся заново...
Код AS3:
var childArray:Array = new Array();
var parentArray:Array = [];
parentArray.push(childArray);
for (var i:int = 0; i < 3; i++) 
{
	childArray.push(new Sprite)
	parentArray.push(childArray);
	trace(parentArray.length,parentArray)
}
Хотя наверное я и прав... Мы положили массив в массив, потом положили в него спрайт, а затем снова положили в массив. И того два спрайта... ТС может у Вас тоже самое?

Старый 31.01.2014, 13:59
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 3  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
После каждого прохода цикла, очищайте массив Mass. У Вас получается, что вы всегда ссылаетесь на одни и те же 3 объекта.
Код AS3:
import flash.events.MouseEvent;
import flash.events.Event;
 
var Mass:Array = new Array();
var MassRed:Array = [];
 
for (var i:int=0; i<3; i++)
{
	Mass = [];
	MassRed.push(Mass);         //Собстна добавляем массив в массив 
	for (var j:int=0; j<3; j++)
	{
 
		var t:Cube = new Cube();// этот квадратик я нарисовал во Flash
		Mass.push(t); // Добавляем объекты в массив
		MassRed[i][j].x = MassRed[i][j].width + 35 * j; //Определяем координаты каждого из квадратиков по x
		MassRed[i][j].y = MassRed[i][j].height + 35 * i; //Определяем координаты каждого из квадратиков по y
		trace(MassRed[i][j]);
		addChild(MassRed[i][j]); // Добавляем элементы на сцену;
	}
}

Старый 31.01.2014, 14:15
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 4  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
for (var i:int=0; i<3; i++)
{
Mass = [];

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

Регистрация: Sep 2006
Сообщений: 111
Цитата:
Сообщение от belv Посмотреть сообщение
После каждого прохода цикла, очищайте массив Mass. У Вас получается, что вы всегда ссылаетесь на одни и те же 3 объекта.
Код AS3:
import flash.events.MouseEvent;
import flash.events.Event;
 
var Mass:Array = new Array();
var MassRed:Array = [];
 
for (var i:int=0; i<3; i++)
{
	Mass = [];
	MassRed.push(Mass);         //Собстна добавляем массив в массив 
	for (var j:int=0; j<3; j++)
	{
 
		var t:Cube = new Cube();// этот квадратик я нарисовал во Flash
		Mass.push(t); // Добавляем объекты в массив
		MassRed[i][j].x = MassRed[i][j].width + 35 * j; //Определяем координаты каждого из квадратиков по x
		MassRed[i][j].y = MassRed[i][j].height + 35 * i; //Определяем координаты каждого из квадратиков по y
		trace(MassRed[i][j]);
		addChild(MassRed[i][j]); // Добавляем элементы на сцену;
	}
}
Точно!))) Спасибо, чет я прям затупил, все работает))) Это еще что както раз я забыл слово "Лес", ну это была уже другая история

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

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

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


 


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


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