Actionscript 3 画廊最后图像修复

Actionscript 3 画廊最后图像修复,actionscript-3,Actionscript 3,我几乎是按照我想要的方式来做这件事的,除了当我向前或向后点击我的图像时,一旦它到达数组长度,下一个图像就不会显示。这只是我添加checkImage()方法时的一个问题。有人知道我做错了什么吗 修理** 包 { 导入flash.display.MovieClip; 导入flash.display.Sprite; 导入flash.display.DisplayObject; 导入flash.events.Event; 导入flash.events.MouseEvent; 导入com.greensoc

我几乎是按照我想要的方式来做这件事的,除了当我向前或向后点击我的图像时,一旦它到达数组长度,下一个图像就不会显示。这只是我添加checkImage()方法时的一个问题。有人知道我做错了什么吗

修理**

包
{
导入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);
        }

    }
}