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

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

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

Регистрация: Oct 2017
Сообщений: 3
По умолчанию bitmap from XML в цикле добавить мувикам

Добрый день! Прошу прощения, если где то некорректно выражусь, первый раз на форуме.
Давно не имел дела с AS3 и зашел в небольшой тупик. Подобный алгоритм выполнял ранее но писал в кадрах и давно. Теперь же нужно реализовать следующее: Из xml файла получаем данные, далее с помощью 2-х циклом добавляем на сцену мувики в определённом порядке, одновременно добавляю тут же им, каждому свой bitmap из массива iconArray.
Задача, что б каждому отдельному экземпляру, сейчас соответствовал свой битмап, котрый хочу получать из iconArray[i]. Но выходит, что присваивается битмап только последнему экземпляру. Видимо не верно добавляю экземпляры или с битмапой работаю.
Проедоставляю код, буду благодарен за корректировки и наводки.
Подразумевалось, что рабочей должна быть строка
mc.addChild(iconArray[i]);
а не
mc.addChild(iconArray[0]);
в конце кода.
Пока выходит так, как во вложении в SWF

файл XML

Код:
<?xml version="1.0" encoding="utf-8"?>
<GameTest>
	<visibleItems>1</visibleItems>
	<delayShowItems>0.2</delayShowItems>
	<tweenTime>0.5</tweenTime>

	<item imageUrl="images/image_1.jpg" linkUrl="http://demolink.org/">
		<description>
			<![CDATA[<font letterspacing="0" color="#000" size="16">orange</font>]]>
		</description>
	</item>
	<item imageUrl="images/image_2.jpg" linkUrl="http://demolink.org/">
		<description>
			<![CDATA[<font letterspacing="0" color="#000" size="16">bell</font>]]>
		</description>
	</item>
	<item imageUrl="images/image_3.jpg" linkUrl="http://demolink.org/">
		<description>
			<![CDATA[<font letterspacing="0" color="#000" size="16">cherry</font>]]>
		</description>

	</item>
	<item imageUrl="images/image_4.jpg" linkUrl="http://demolink.org/">
		<description>
			<![CDATA[<font letterspacing="0" color="#000" size="16">lemon</font>]]>
		</description>
	</item>
	<item imageUrl="images/image_5.jpg" linkUrl="http://demolink.org/">
		<description>
			<![CDATA[<font letterspacing="0" color="#000" size="16">grape</font>]]>
		</description>
	</item>
</GameTest>
файл main.as

Код AS3:
package
{
	import flash.display.*;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	public class Main extends Sprite
	{
		public var mc:mc1_as = new mc1_as;
 
		//public var imageLoad:Loader;
		//public var slideURL:URLRequest;
		//public var bitmap:Bitmap;
 
		public function Main()
		{
			var loader:URLLoader = new URLLoader();
			loader.load(new URLRequest("xml/tfile_main.xml"));
			loader.addEventListener(Event.COMPLETE, loadGraphic);
		}
 
		private function loadGraphic(e:Event):void
		{
			var xml:XML = new XML(e.target.data);
 
			var iconsQuantity:Number = xml.item.length();
			var reelsQuantity:Number = 3;
			var iconsInReelQuantity:Number = 3;
 
			var iconArray:Array = new Array();
			var correctArray:Array = new Array(); // for future vars from Combobox
 
			var stepX:int = 0;
			var stepY:int = 0;
 
			for (var j:int = 0; j < reelsQuantity; j++)
			{
 
				stepX += 100;
				stepY = 0;
 
				for (var i:int = 0; i < iconsInReelQuantity; i++)
				{
					mc = new mc1_as();
					addChild(mc);
					mc.num = i;
					mc.name = "icon" + i;
					mc.x = stepX;
					mc.y = stepY;
 
					stepY += 72;
 
					var imageLoad:Loader = new Loader();
					var slideURL:URLRequest = new URLRequest(xml.item[i].@imageUrl);
					imageLoad.load(slideURL);
					imageLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImgComplite);
 
					function loadImgComplite(e:Event):void
					{
						var bitmap:Bitmap = new Bitmap;
						bitmap = (imageLoad.content as Bitmap);
						bitmap.smoothing = false;
						iconArray.push(bitmap);
						trace(iconArray);
						//mc.addChild(iconArray[i]);
						mc.addChild(iconArray[0]);
					}
 
				}
 
			}
		}
	}
}
Добавлено через 7 часов 31 минуту
Что то не получилось у меня приатачить файл, посему вот ссылка на архив проекта, FlasshDevelop:
http://dropmefiles.com/MfGlK

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
mc.addChild(iconArray[0]); — естественно Вы здесь аттачите один и тот же битмап из нулевой ячейки массива iconArray.
При том, что у Вас же есть вполне себе ссылка на новый битмап — bitmap. Почему бы не аттачить его?

Добавлено через 5 минут
На всякий случай укажу, что public var mc:mc1_as будет в конце загрузки указывать на последний созданный экземпляр mc1_as (с последней загруженной битмапой). На остальные мувики ссылок не будет (хотя к ним еще можно достучаться через getChildAt() ).
__________________
Reality.getBounds(this);

Старый 08.10.2017, 07:18
_jack вне форума Посмотреть профиль Отправить личное сообщение для _jack Найти все сообщения от _jack
  № 3  
Ответить с цитированием
_jack

Регистрация: Oct 2017
Сообщений: 3
Спасибо)
Но, увы, я так и пробовал сначала, вот пруф, абсолютно аналогично, я думал без массивов как то пропетлять, но не получилось:

Код AS3:
package
{
	import flash.display.*;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	public class Main extends Sprite
	{
		public var mc:mc1_as = new mc1_as;
 
		//public var imageLoad:Loader;
		//public var slideURL:URLRequest;
		//public var bitmap:Bitmap;
 
		public function Main()
		{
			var loader:URLLoader = new URLLoader();
			loader.load(new URLRequest("xml/tfile_main.xml"));
			loader.addEventListener(Event.COMPLETE, loadGraphic);
		}
 
		private function loadGraphic(e:Event):void
		{
			var xml:XML = new XML(e.target.data);
 
			var iconsQuantity:Number = xml.item.length();
			var reelsQuantity:Number = 3;
			var iconsInReelQuantity:Number = 3;
 
			var iconArray:Array = new Array();
			var correctArray:Array = new Array(); // for future vars from Combobox
 
			var stepX:int = 0;
			var stepY:int = 0;
 
			for (var j:int = 0; j < reelsQuantity; j++)
			{
 
				stepX += 100;
				stepY = 0;
 
				for (var i:int = 0; i < iconsInReelQuantity; i++)
				{
					mc = new mc1_as();
					addChild(mc);
					mc.num = i;
					mc.name = "icon" + i;
					mc.x = stepX;
					mc.y = stepY;
 
					stepY += 72;
 
					var imageLoad:Loader = new Loader();
					var slideURL:URLRequest = new URLRequest(xml.item[i].@imageUrl);
					imageLoad.load(slideURL);
					imageLoad.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImgComplite);
 
					function loadImgComplite(e:Event):void
					{
						var bitmap:Bitmap = new Bitmap;
						bitmap = (imageLoad.content as Bitmap);
						bitmap.smoothing = false;
						iconArray.push(bitmap);
						trace(iconArray);
						//mc.addChild(iconArray[i]);
						//mc.addChild(iconArray[0]);
						mc.addChild(bitmap);				
					}	
				}
			}
		}
	}
}
Один в один результат, я полагаю в подходе моём что то тупорылое есть, вычищаю битмапу что ли

Добавлено через 20 минут

"На всякий случай укажу, что public var mc:mc1_as будет в конце загрузки указывать на последний созданный экземпляр mc1_as" цитата -->


--> Да, именно так и происходит. Грузится лишь содержимое последнего экземпляра. Графику подтягивает. Достучаться получается нужно в цикле, т.е. не так обращаюсь?
Могли б вы подредактировать или указать на ошибку, что б всю дорогу цикла кушал нужный экземпляр мувика, нужную битмапу. Вы правы, как раз последний всегда срабатывает, будто убивает всё предыдущее


Последний раз редактировалось _jack; 08.10.2017 в 07:55.
Создать новую тему Ответ Часовой пояс GMT +4, время: 05:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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