2011-12-26 10 views
2

私は画像を前後にクリックしていて、それが配列の長さに達すると次の画像は表示されません。これは、checkImage()メソッドを追加する場合にのみ問題になります。誰か私が間違っているのを見ますか? **ギャラリー最後の画像の修正

package 
{ 

    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.display.DisplayObject; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 


    import com.greensock.TweenMax; 
    import com.greensock.layout.*; 
    import com.greensock.loading.LoaderMax; 
    import com.greensock.loading.XMLLoader; 
    import com.greensock.loading.ImageLoader; 
    import com.greensock.events.LoaderEvent; 
    import com.greensock.loading.display.ContentDisplay; 
    import com.greensock.loading.data.XMLLoaderVars; 


    public class Main extends MovieClip 
    { 

     public var imgHolder:MovieClip; 

     private var ls:LiquidStage; 
     private var la:LiquidArea; 
     private var xml:XMLLoader; 
     private var index:int = 0; 
     private var images:Array; 


     public function Main() 
     { 
      arrowRight.alpha = arrowLeft.alpha = .5; 
      xmlLoader(); 
     } 

     private function xmlLoader():void 
     { 
      LoaderMax.activate([ImageLoader]); 
      xml = new XMLLoader("assets/data.xml", new XMLLoaderVars() 
                .name("loader") 
                .estimatedBytes(600000) 
                .onComplete(xmlLoaded) 
                .onProgress(loadProgress)); 
      xml.load(); 

     } 

     private function xmlLoaded(e:LoaderEvent):void 
     { 
      trace("Loaded"); 
      arrowListeners(); 
      showImage(index); 
     } 

     private function loadProgress(event:LoaderEvent):void 
     { 
      progressMC.progressBar.scaleX = event.target.progress; 
     } 

     private function showImage(index:int):void 

     { 
      ls = new LiquidStage(this.stage, 1024, 768, 1024, 768); 
      la = new LiquidArea(imgHolder, 0, 0, 1024, 768); 

      images = LoaderMax.getContent("loader"); 

      imgHolder.addChild(images[index]); 

      TweenMax.from(images[index], 1, {alpha:0}); 
      la.attach(images[index], {scaleMode:ScaleMode.PROPORTIONAL_OUTSIDE, crop:true}); 


     } 

     // BUTTON FUNCTIONS 
     private function arrowListeners():void 
     { 
      arrowRight.addEventListener(MouseEvent.ROLL_OVER, rollOverArrowHandler, false, 0, true); 
      arrowRight.addEventListener(MouseEvent.ROLL_OUT, rollOutArrowHandler, false, 0, true); 
      arrowRight.addEventListener(MouseEvent.CLICK, showNext); 
      arrowLeft.addEventListener(MouseEvent.ROLL_OVER, rollOverArrowHandler, false, 0, true); 
      arrowLeft.addEventListener(MouseEvent.ROLL_OUT, rollOutArrowHandler, false, 0, true); 
      arrowLeft.addEventListener(MouseEvent.CLICK, showPrev); 
     } 

     private function rollOverArrowHandler(e:MouseEvent):void 
     { 
      TweenMax.to(e.currentTarget, 0.5, {alpha:1}); 
     } 

     private function rollOutArrowHandler(e:MouseEvent):void 
     { 
      TweenMax.to(e.currentTarget, 0.5, {alpha:.5}); 
     } 

     // CLICK LISTENERS 
     private function showNext(e:MouseEvent):void 
     { 
      index++ 
      if (index > images.length - 1) 
      { 
       index = 0; 
      } 

      showImage(index); 
     } 

     private function showPrev(e:MouseEvent):void 
     { 
      index-- 
      if (index < 0) 
      { 
       index = images.length - 1; 
      } 
      showImage(index); 
     } 

    } 
} 

答えて

0

修正がいくつかの事が気になる:

1)インデックスは、グローバル変数と関数paramです - 矛盾しますか?

2)checkimage機能であなたは 'インデックス' を渡すが、getChildAtとRemoveChildAt

3に0を参照してください)> 0するnumChildrenが真

であれば、あなたはcheckimageでshowimageを呼び出すことはありませんIそれを整理するために、このすべてに目を向けたいと思っています。

+0

お返事ありがとうございます。 paramの競合を修正するために異なるvarsを追加しようとしましたが、問題リストの残りの部分を修正しようとしましたが、エラーが発生しました。 "TypeError:エラー#1034:型強制が失敗しました:flash.display :: Shape @ 4e18aa11をflash.display.Sprite "私は私が得たもので古いイメージを取り除くための他の方法を知らない。前のイメージを削除する別の安全な方法を考えてもよろしいですか? – Nerdysyntax

+0

コードが何をやっているのか完全にはっきりしていませんが、開始時にすべての画像をロードしてループすることができれば幸いです。なぜロードしてからリロードするのですか? – ethrbunny

+0

これは私のコードが揺れて見えるかもしれないので、まあまあです。私はちょうどブラウザのスケーリングと画像ギャラリーのための次と前のボタンを設定しようとしています。最初はcheckImage関数を使わずにループしていましたが、うまくいきましたが、何らかのタイプのガベージコレクションが必要だと思いました。 checkImage()を削除する必要がありますか? – Nerdysyntax

関連する問題