|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: 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> 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]); } } } } } } Что то не получилось у меня приатачить файл, посему вот ссылка на архив проекта, FlasshDevelop: http://dropmefiles.com/MfGlK |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
mc.addChild(iconArray[0]); — естественно Вы здесь аттачите один и тот же битмап из нулевой ячейки массива iconArray.
При том, что у Вас же есть вполне себе ссылка на новый битмап — bitmap. Почему бы не аттачить его? Добавлено через 5 минут На всякий случай укажу, что public var mc:mc1_as будет в конце загрузки указывать на последний созданный экземпляр mc1_as (с последней загруженной битмапой). На остальные мувики ссылок не будет (хотя к ним еще можно достучаться через getChildAt() ).
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2017
Сообщений: 3
|
Спасибо)
Но, увы, я так и пробовал сначала, вот пруф, абсолютно аналогично, я думал без массивов как то пропетлять, но не получилось: 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. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|