我正在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].@THUMB;
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 :(得分:0)
从表面上看,你可能会在某个地方遇到竞争状况。很难遵循代码,因为它是一种意大利面,但有一个明显的问题:你开始加载缩略图,然后才设置加载器的坐标。缩略图的COMPLETE事件很可能在安装之前或安装过程中被触发,这会使事情变得混乱。
以下是一些尝试:
load()
之前将其添加到容器中。除非使用匿名函数,否则不要在另一个函数中定义函数:
为:
function abc(){trace('abc'); } object.addEventLisenter(“event”,abc);
好:
object.addEventListener(“event”,function(){trace('abc');});
从仅触发一次并且已经完成的事件中删除事件侦听器没有太大意义。取消变量也没有多大意义 - 垃圾收集器会处理它们,也不会处理它们,额外的行只是不需要的冗长。