Actionscript 3 画廊最后图像修复
我几乎是按照我想要的方式来做这件事的,除了当我向前或向后点击我的图像时,一旦它到达数组长度,下一个图像就不会显示。这只是我添加checkImage()方法时的一个问题。有人知道我做错了什么吗 修理**Actionscript 3 画廊最后图像修复,actionscript-3,Actionscript 3,我几乎是按照我想要的方式来做这件事的,除了当我向前或向后点击我的图像时,一旦它到达数组长度,下一个图像就不会显示。这只是我添加checkImage()方法时的一个问题。有人知道我做错了什么吗 修理** 包 { 导入flash.display.MovieClip; 导入flash.display.Sprite; 导入flash.display.DisplayObject; 导入flash.events.Event; 导入flash.events.MouseEvent; 导入com.greensoc
包
{
导入flash.display.MovieClip;
导入flash.display.Sprite;
导入flash.display.DisplayObject;
导入flash.events.Event;
导入flash.events.MouseEvent;
导入com.greensock.TweenMax;
导入com.greensock.layout.*;
导入com.greensock.loading.LoaderMax;
导入com.greensock.loading.XMLLoader;
导入com.greensock.loading.ImageLoader;
导入com.greensock.events.LoaderEvent;
导入com.greensock.loading.display.ContentDisplay;
导入com.greensock.loading.data.xmloadervars;
公共类Main扩展了MovieClip
{
公共var imgHolder:MovieClip;
私人var ls:流动阶段;
私人var la:流动区;
私有var-xml:xmloader;
私有var指数:int=0;
私有var图像:数组;
公共功能Main()
{
arrowRight.alpha=arrowLeft.alpha=.5;
xmlLoader();
}
私有函数xmlLoader():void
{
LoaderMax.activate([ImageLoader]);
xml=newXMLLoader(“assets/data.xml”,newXMLLoadervars()
.名称(“加载器”)
.估计数据字节(600000)
.onComplete(xmlLoaded)
.onProgress(loadProgress));
load();
}
私有函数xmlLoaded(e:LoaderEvent):void
{
跟踪(“加载”);
箭头侦听器();
showImage(索引);
}
私有函数loadProgress(事件:LoaderEvent):void
{
progressMC.progressBar.scaleX=event.target.progress;
}
私有函数showImage(索引:int):无效
{
ls=新的流动阶段(此阶段,1024768,1024768);
la=新的液体区域(imgHolder,0,0,1024,768);
images=LoaderMax.getContent(“加载器”);
addChild(图像[索引]);
TweenMax.from(图像[index],1,{alpha:0});
附加(图像[索引],{scaleMode:scaleMode.out,crop:true});
}
//按钮功能
私有函数arrowListeners():void
{
箭头右键。addEventListener(MouseEvent.ROLL_OVER,rollOverArrowHandler,false,0,true);
箭头right.addEventListener(MouseEvent.ROLL_OUT,rollutarrowhandler,false,0,true);
箭头右键。addEventListener(MouseEvent.CLICK,showNext);
箭头左。addEventListener(MouseEvent.ROLL_OVER,rollOverArrowHandler,false,0,true);
箭头左。addEventListener(MouseEvent.ROLL_OUT,rollutarrowhandler,false,0,true);
向左箭头。添加事件列表器(MouseEvent.CLICK,showPrev);
}
私有函数rollOverArrowHandler(e:MouseeEvent):无效
{
TweenMax.to(e.currentTarget,0.5,{alpha:1});
}
私有函数rollOutArrowHandler(e:MouseeEvent):无效
{
TweenMax.to(e.currentTarget,0.5,{alpha:.5});
}
//单击侦听器
私有函数showNext(e:MouseEvent):无效
{
索引++
如果(索引>images.length-1)
{
指数=0;
}
showImage(索引);
}
私有函数showPrev(e:MouseEvent):无效
{
索引--
如果(指数<0)
{
索引=images.length-1;
}
showImage(索引);
}
}
}
我想到了几件事:
1) 索引是一个全局变量,函数参数冲突
2) 在checkimage函数中,传入'index',但在getChildAt和RemoveChildAt中引用0
3) 如果numchildren>0为true,则不在checkimage中调用showimage
我想追踪这一切来解决问题。我想到了几件事: 1) 索引是一个全局变量,函数参数冲突 2) 在checkimage函数中,传入'index',但在getChildAt和RemoveChildAt中引用0 3) 如果numchildren>0为true,则不在checkimage中调用showimage
我想追踪这一切来解决问题。谢谢您的回复。我试图添加不同的变量来修复参数冲突和问题列表的其余部分,但现在得到一个错误“TypeError:error#1034:Type强制失败:无法转换flash。display::Shape@4e18aa11我不知道还有什么其他方法可以用我得到的来摆脱旧的图像。你能想出另一种安全的方法来删除以前的图像吗?不完全确定代码应该做什么。。但是我想知道你是否可以在开始的时候加载所有的图片,然后在上面循环。为什么要先加载然后再重新加载呢?哦,是的,我是新来的,所以我的代码可能看起来不稳定。我只是想设置下一个和上一个按钮的图像库与浏览器缩放。我想一开始我没有使用checkImage函数就让它循环,而且它工作得很好,但我认为需要某种类型的垃圾收集。我应该删除checkImage()?在Flex中GC是自动的。只要小心不要每次都增加数组(即只循环已知值),就可以了。如果预加载图像的成本很高,那么这可能是一种更好的方法。。否则“简单的方法已经足够难了”。好的,上面的代码就是我现在所拥有的,它工作得很好。没有问题,所以我希望GC仍然在automatic flex中。谢谢你的回复。我尝试添加不同的变量来修复参数冲突a
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);
}
}
}