2009-09-01 5 views
0

私はAS3で商業目的でのプロジェクトも開発しています。AS3でサイズ変更XMLギャラリー

今回はXMLとAS3の画像ギャラリーを開発していますが、ステージのサイズを変更して画像のx位置を変更することに疑問があります。

このコードでは、画像のサイズを変更できますが、x値は変更できません。

誰も私にこの壊滅的な状況についての光を助けてくれますか?

Thanx a lot!

私が使用しているコード:

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( "イベント"、abc);

    こだわり:

    object.addEventListener( "イベント"、関数(){トレース( 'ABC');});

  • イベントリスナーを1回だけ発生し、すでに終了したイベントから削除することはあまり意味がありません。また、ガベージコレクタがそれらを処理するか、そうでないかのどちらかで、変数を無効にすることには多くの点がありません。余分な行は不要な冗長さにすぎません。

+0

答えのためのガウス。 私はあなたが私に言った変更を行うためにtriyngですが、これはまだうまく動作していません。 Bu私はより客観的な質問があります。 私の親指のX位置は "for"コマンド内で定義されています。これは関数内にあります。 関数を再度実行せずにthumb_loaderのx位置を更新するにはどうすればよいですか? –

+0

thumb_loaderへの参照があれば、それだけで十分です。おそらく、おそらくループに局所的にスコープされているx_counterへのアクセスを意味するでしょう。それぞれの繰り返しの現在の値をthumb_loaderのような(または代わりに)thumb_loaderの 'i'のようなプロパティに割り当てることができます。 – Guss

関連する問題