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

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

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

Регистрация: Feb 2010
Сообщений: 9
По умолчанию Непонятно работает addChild

Здравствуйте. Извините, что обращаюсь с подобным вопросом, просто, наверное, нужен "незамыленный" взгляд на код. Вроде бы простой кусочек программы, который должен наполнять массив 20ю объектами класса Smile и выводить их на экран. Привожу самый упрощенный уже вариант, потому что и он не работает.
Код AS3:
package smilegame 
{
	import flash.display.*;
 
	/**
	 * ...
	 * @author Irishman
	 */
	public class MainClass extends Sprite 
	{
		var smile:Smile;
		var masSmile:Array = new Array();
 
		public function MainClass() 
		{
			init();
		}
		internal function init():void
		{
			trace("start stage child= " + stage.numChildren);//1
			for (var i = 0; i < 10; i++) 
			{
				smile = new Smile();
				masSmile.push(smile);
				masSmile.unshift(smile);
				trace("mas len= " + masSmile.length);//2
			}
			k = 0;
			trace(masSmile.length);//3
			for (var q = 0; q < 20; q++) 
			{
				masSmile[k].y = q * 10 + 10;
				stage.addChild(masSmile[k]);
				trace(k,stage.contains(masSmile[k]),stage.numChildren);//4
				k++;
			}
		}
 
	}
 
}
В итоге, первый trace выдает начальное значение 1, цикл вторых трейсов показывает исправное увеличение массива за каждый шаг на 2 элемента, третий трейс выдает количество элементов в массиве равно 20(сколько и нужно), а вот 4 трейс ведет себя странно. k исправно принимает значения до 19(+нулевой элемент, то есть проходим все 20 элементов массива), stage.contains выдает true все 20 раз, а вот numChildren перестает увеличиваться после 10го шага и остается равным 11. Уже не знаю на что подумать, руки прямее достать пока не судьба=)
Визуальный результат - добавляется всего 10 элементов, причем, такое ощущение, что из "середины" массива, так по идее, первой y-координатой должно быть 10, а на самом деле 50-60.
__________________
я обитаю здесь


Последний раз редактировалось Irishman; 04.03.2011 в 07:02.
Старый 04.03.2011, 07:19
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
internal function init():void
{
	for (var i = 0; i < 20; i++) 
	{
		smile = new Smile();
		masSmile.push(smile);
		smile.y = i * 10 + 10;
		stage.addChild(masSmile[k]);
	}
}
addChild работает правильно. Вы в первом цикле делаете push и unshift, дублируя ссылку на новый Smile, поэтому и получаете после цикла с 10 итерациями массив с 20 повторяющимися элементами. А потом в цикле до 20 вставляете эти смайлы и видите только 10, потому, что фактически вы создали их ровно столько же. Нельзя один и тот же клип добавить в потомки сто раз и увидеть сто разных клипов, только один и останется.
__________________
hauts.ru


Последний раз редактировалось Hauts; 04.03.2011 в 07:23.
Старый 04.03.2011, 07:27
Irishman вне форума Посмотреть профиль Отправить личное сообщение для Irishman Найти все сообщения от Irishman
  № 3  
Ответить с цитированием
Irishman

Регистрация: Feb 2010
Сообщений: 9
О, спасибо огромное=) сам бы на это никогда не подумал!
__________________
я обитаю здесь

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

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

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


 


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


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