Плавное изображение при загрузке в as3
Я новичок здесь и полный нуб, когда дело доходит до as3. Каким-то образом мне удалось соединить это с некоторой помощью из разных мест. А теперь я обращаюсь к вам, ребята:)
Мне нужно сгладить изображения и превью, которые я загружаю из файла XML. Я пробовал много вещей, но не могу заставить их работать, и я получаю эту ошибку: Сцена 1, Слой 'as3', Кадр 1, Строка 27 1120: Доступ к неопределенному свойству e. -> Так что я знаю var bitmapContent:Bitmap = Bitmap( e.target.content );
это проблема. но я понятия не имею, что использовать вместо е. Я это я то, что я до сих пор:
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.transitions.easing.None;
import flash.display.Bitmap;
// Loads the first image//
var i =new Loader();
i.load(new URLRequest("images/1.jpg"));
mainLoader.addChild(i)
//Loads the XML file//
var picsXML:XML;
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE , xmlLoaded);
xmlLoader.load(new URLRequest("imagelist.xml"));
//Loads images into thumbs//
function xmlLoaded(event:Event):void{
picsXML = new XML(xmlLoader.data);
//trace(picsXML);
var bitmapContent:Bitmap = Bitmap( e.target.content );
bitmapContent.smoothing = true;
var thumbLoader:UILoader;
for (var i:uint=0; i<picsXML.image.length(); i++)
{
thumbLoader=UILoader(getChildByName("thumb"+i));
thumbLoader.load(new URLRequest("thumbs/"+picsXML.image[i].@file));
thumbLoader.buttonMode = true;
thumbLoader.addEventListener(MouseEvent.CLICK, thumbClicked);
thumbLoader.addEventListener(MouseEvent.CLICK, tester);
}
}
//Loads large image when thumb is clicked//
function thumbClicked(event:MouseEvent){
//var bitmapImage:Bitmap = event.target.content;
//bitmapImage.smoothing = true;
var thumbName:String = event.currentTarget.name;
var thumbIndex:uint = uint(thumbName.substr(5));
var fullPath:String = "images/"+picsXML.image[thumbIndex].@file;
mainLoader.load(new URLRequest(fullPath));
var myTween:Tween = new Tween(mainLoader,"alpha", None.easeNone, .3,1,18,false);
}
//Removes the first image when thumbs is clicked//
function tester(event:MouseEvent){
if (mainLoader.contains(i)) {
trace("hej")
mainLoader.removeChild(i);
}
}
3 ответа
Если я правильно понял ваш код, проблема здесь: вы импортируете внешний XML-файл, который, вероятно, содержит ваши URL и имена картинок. Вы не можете превратить ваш XML-файл в растровое изображение.
Если вы хотите сгладить ваши фотографии, вам нужно это после загрузки фотографий или большого пальца. Вероятно, ваша проблема будет решена так:) Надеюсь, это поможет
Спасибо за вклад, ребята. Это очень ценится. Я понял. Вы были правы, конечно, я не могу поставить сглаживание на UILoader, поэтому мне пришлось нацелиться на содержимое UILoader и запустить thumbLoader.addEventListener(Event.COMPLETE, smoothing); каждый раз изображение важно.
Вот весь рабочий код (может быть, он может помочь кому-то еще:):
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.transitions.easing.None;
import flash.display.Bitmap;
import flash.display.Loader;
// Loads the first image//
var i =new Loader();
i.load(new URLRequest("images/1.jpg"));
mainLoader.addChild(i)
//Loads the XML file//
var picsXML:XML;
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE , xmlLoaded);
xmlLoader.load(new URLRequest("imagelist.xml"));
//Loads images into thumbs//
function xmlLoaded(event:Event):void{
picsXML = new XML(xmlLoader.data);
var thumbLoader :UILoader = new UILoader();
for (var i:uint=0; i<picsXML.image.length(); i++)
{
thumbLoader=UILoader(getChildByName("thumb"+i));
thumbLoader.load(new URLRequest("thumbs/"+picsXML.image[i].@file));
thumbLoader.buttonMode = true;
thumbLoader.addEventListener(MouseEvent.CLICK, thumbClicked);
thumbLoader.addEventListener(MouseEvent.CLICK, tester);
thumbLoader.addEventListener(Event.COMPLETE, smoothing);
}
}
function smoothing(e:Event):void{
if(e.currentTarget.content is Bitmap)
{
Bitmap(e.currentTarget.content).smoothing = true;
}
}
//Loads large image when thumb is clicked//
function thumbClicked(event:MouseEvent){
var thumbName:String = event.currentTarget.name;
var thumbIndex:uint = uint(thumbName.substr(5));
var fullPath:String = "images/"+picsXML.image[thumbIndex].@file;
mainLoader.load(new URLRequest(fullPath));
mainLoader.addEventListener(Event.COMPLETE, smoothing);
var myTween:Tween = new Tween(mainLoader,"alpha", None.easeNone, .3,1,18,false);
}
//Removes the first image when thumbs is clicked//
function tester(event:MouseEvent){
if (mainLoader.contains(i)) {
trace("hej")
mainLoader.removeChild(i);
}
}
Функции с аргументами работают следующим образом: Имя функции (имя входного аргумента: Тип входного аргумента)
Во-первых, ваша функция xmlLoaded(event:Event)
не может иметь вход с именем события, но затем вы пытаетесь сделать Bitmap( e.target.content );
так, чтобы эта строка растрового изображения работала, вам нужно изменить свое входное имя на e, например... xmlLoaded( e : Event );
Во-вторых, var bitmapContent:Bitmap = Bitmap( e.target.content );
это неверно.
Это правильнее var bitmapContent:Bitmap = img_Bytes_Loader.content as Bitmap;
установить Loader
Содержимое в виде растрового изображения, а не XML-содержимого (текст) в виде растрового изображения (пикселей).
В любом случае, если ваш XML-файл выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<mp3>
<url> track1.mp3 </url>
<image> image1.jpg </image>
</mp3>
<mp3>
<url> track2.mp3 </url>
<image> image2.jpg </image>
</mp3>
</Items>
Тогда ваш код должен выглядеть примерно так:
var imgLoader_XML : URLRequest;
var picLoader : Loader = new Loader();
function xmlLoaded(event:Event):void
{
picsXML = new XML(xmlLoader.data);
//trace(picsXML);
imgLoader_XML = new URLRequest( picsXML.mp3[ index ].image ); //[index] could be replaced with [i] if FOR loop
picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, picloadComplete);
picLoader.load (imgLoader_2);
}
public function picloadComplete(evt:Event)
{
yourContainer.addChild(picLoader);
yourContainer.width = 100;
yourContainer.height = 100;
yourContainer.alpha = 1;
}