2009-09-01 4 views
0

Я разрабатываю проект в AS3 в коммерческих целях и изучаю.Редактировать галерею XML с AS3

На этот раз я разрабатываю галерею изображений с XML и AS3, и у меня есть сомнения в изменении размера сцены и изменении положения x моих изображений.

С помощью этого кода ниже я могу изменить размер изображений, но я не могу изменить их значения x.

Неужели кто-нибудь может спрятать меня с этой ситуацией?

Thanx много!

код я использую:

import flash.display.StageScaleMode; 
import flash.display.StageAlign; 

stage.align = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE; 


var container_mc:MovieClip; 

var my_images:XMLList; 
var my_total:Number; 

var my_thumb_width:Number; 
var my_thumb_height:Number; 

var x_counter:Number = 0; 



var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("xml/snfashion_xml.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
var myXML:XML = new XML(e.target.data); 

my_images = myXML.IMAGE; 
my_total = my_images.length(); 

createContainer(); 
callThumbs(); 

myXMLLoader.removeEventListener(Event.COMPLETE, processXML); 
myXMLLoader = null; 
} 

function createContainer():void { 
container_mc = new MovieClip(); 
container_mc.x = 0; 
container_mc.y = 0; 
addChild(container_mc); 
} 

function callThumbs():void { 
for (var i:Number = 0; i < my_total; i++) { 

    var thumb_url = my_images[i][email protected]; 

    var thumb_loader = new Loader(); 
    thumb_loader.load(new URLRequest(thumb_url)); 
    thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded); 

    thumb_loader.name = i; 

    thumb_loader.x = ((stage.stageHeight-80)*0.451428)*(x_counter); 
    thumb_loader.y = 0; 

    if (x_counter < my_total) { 
     x_counter++; 
    } 
} 
} 

function thumbLoaded(e:Event):void { 
var my_thumb:Loader = Loader(e.target.loader); 
container_mc.addChild(my_thumb); 
my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoaded); 

my_thumb.width = (stage.stageHeight-80)*0.4571428; 
my_thumb.height = stage.stageHeight-80; 




function thumbLoadedResize (e:Event):void 
    { 
     trace("STAGE HAS BEEN RESIZED"); 

     my_thumb.width = (stage.stageHeight-80)*0.4571428; 
     my_thumb.height = stage.stageHeight-80; 

    } 

    stage.addEventListener(Event.RESIZE, thumbLoadedResize); 

} 

Я попытался вызвать этап изменения размера функции в thumb_loader и my_thumb, но он не работал, в косе не генерирует сообщения об ошибках.

ответ

0

На первый взгляд, похоже, что у вас может быть состояние гонки где-то. Его трудно следить за кодом, потому что его вид спагетти, но есть одна очевидная проблема: вы начинаете загружать миниатюры и только затем настраиваете координаты загрузчика. Вполне возможно, что событие COMPLETE в миниатюре запускается до или во время настройки, и это все испортит.

Вот несколько вещей, чтобы попробовать:

  • Настройка загрузчика, включая добавление его в контейнер перед выполнением load().
  • не определить функцию внутри другой функции, если не использовать анонимные функции:

    Bad:

    функции а() {след ('ABC'); } object.addEventLisenter ("event", abc);

    Хорошо:

    object.addEventListener ("событие", функция() {след ('ABC');});

  • Существует не так много смысла в удалении прослушивателя событий из события, которое срабатывает только один раз и уже сделано. Также нет большого смысла в аннулировании переменных - либо сборщик мусора будет обрабатывать их, либо он не будет, что дополнительные строки - это просто ненужная многословие.

+0

Guss, thanx для ответа. Я triyng, чтобы сделать изменения, которые вы мне сказали, но это пока не работает. У меня есть более объективный вопрос. Положение большого пальца X задано в команде «для», которая находится внутри функции. Как я могу обновить положение x thumb_loader без повторного выполнения функции? –

+0

Если у вас есть ссылка на thumb_loader, тогда это все, что вам нужно. Вероятно, вы имеете в виду доступ к x_counter, который локально привязан к циклу - ну, вы можете назначить его текущее значение для каждой итерации свойству на thumb_loader - как (или вместо того, как) вы храните 'i' в thumb_loader. – Guss