2009-09-01 57 views
0

我正在開發一個用於商業目的和研究的AS3項目。使用AS3調整XML庫的大小

這次我正在開發一個帶有XML和AS3的圖片庫,我對調整舞臺大小和改變圖片的x位置有疑問。

下面的代碼我可以調整圖片的大小,但我不能更改它們的x值。

任何人都可以幫助我解決這個頭痛的問題嗎?

非常感謝!

我正在使用的代碼:

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_loadermy_thumb,但它並沒有奏效,在不產生錯誤消息吐。

回答

0

在它的表面上看起來你可能有某處的競爭條件。它很難遵循代碼,因爲它是一種意大利麪條,但有一個明顯的問題:您開始加載縮略圖,然後設置加載程序的座標。它很可能在安裝之前或安裝過程中觸發縮略圖的COMPLETE事件,並且會造成混亂。

這裏有一些事情要嘗試:

  • 設置裝載機,包括你執行load()之前將其添加到容器中。

    壞:

  • ,除非你使用匿名函數不另一個函數中定義一個函數

    功能ABC(){跟蹤( 'ABC'); } object.addEventLisenter(「event」,abc);

    良好:

    object.addEventListener( 「事件」,函數(){跟蹤( 'ABC');});

  • 從僅觸發一次並且已經這樣做的事件中刪除事件偵聽器沒有多大意義。在取消變量方面也沒有多大意義 - 垃圾回收器可以處理它們,或者不會,多餘的行只是不必要的冗長。

+0

guss,thanx爲答案。 我triyng做你告訴我的變化,但這還不能正常工作。 卜我有一個更客觀的問題。 我的大拇指X位置是在「for」命令中定義的,位於一個函數內。 如何在不再次執行函數的情況下更新thumb_loader的x位置? – 2009-09-02 00:17:30

+0

如果你有一個對thumb_loader的引用,那麼這就是你所需要的。你可能意思是訪問x_counter,它的本地範圍在循環中 - 你可以將它的當前值分配給thumb_loader的一個屬性 - 就像你在thumb_loader中存儲'i'一樣。 – Guss 2009-09-02 08:27:39