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);
}
}
}
お返事ありがとうございます。 paramの競合を修正するために異なるvarsを追加しようとしましたが、問題リストの残りの部分を修正しようとしましたが、エラーが発生しました。 "TypeError:エラー#1034:型強制が失敗しました:flash.display :: Shape @ 4e18aa11をflash.display.Sprite "私は私が得たもので古いイメージを取り除くための他の方法を知らない。前のイメージを削除する別の安全な方法を考えてもよろしいですか? – Nerdysyntax
コードが何をやっているのか完全にはっきりしていませんが、開始時にすべての画像をロードしてループすることができれば幸いです。なぜロードしてからリロードするのですか? – ethrbunny
これは私のコードが揺れて見えるかもしれないので、まあまあです。私はちょうどブラウザのスケーリングと画像ギャラリーのための次と前のボタンを設定しようとしています。最初はcheckImage関数を使わずにループしていましたが、うまくいきましたが、何らかのタイプのガベージコレクションが必要だと思いました。 checkImage()を削除する必要がありますか? – Nerdysyntax