AS3& MVC:在数组中导入多个图像

时间:2013-09-01 14:51:32

标签: arrays actionscript-3 model-view-controller loader

我正在使用MVC进行纸牌游戏。我知道在我的情况下使用MVC是过度的,我正在使用它,因为我需要学习它。

这是我的问题:在我的模型中,我正在导入多个图像,我在一个阵列(我的卡片组)中存储。然后我需要在我的视图中访问这个数组,以便addChild每个图像。

型号:

package com {

    import flash.events.*;
    import flash.display.*;
    import flash.net.*;

    public class Model extends EventDispatcher {

        var imgcontainer:Loader = new Loader();
        var i:int=0;
        var _setCartes:Array;

        public function Model(target:Stage){
            _setCartes = new Array();
            ImportImg();
        }

        public function ImportImg():void{

            while (i<13){

                imgcontainer.load(new URLRequest("img/"+i+".png"));
                _setCartes.push(imgcontainer);
                i+=1;
                trace(_setCartes);
            }

        }


        public function get setcartes():Array {

            return _setCartes;

        }

    }
}

在我看来,我有这个方法:

    private function doChange(ev:Event):void {
        removeChild(_btncontainer);
        _setCartes = _model.setcartes;
        addChild(_setCartes[5]);
        _setCartes[5].x=100;
        addChild(_setCartes[3]);
        _setCartes[3].x=300;


    }

出现两件事:

  • 首先,我的数组中的每个元素都显示相同的图像。如果我addChild _setCartes [5]或_setCartes [3]或_setCartes [0]或其他什么,它将始终显示相同的卡,就像它在我的数组中存储13 x相同的图像一样。

  • 其次,我不能同时添加_setCartes [5]和_setCartes [3],只会显示第二个。我试图在不同的Sprites中存储我的数组的每个元素,并且addChild每个Sprite,但它没有显示任何内容。当我跟踪Sprite时,它说“Object Sprite”(当我跟踪数组时它显示13“Object Loader”),但是舞台上没有任何内容。

我不明白我做错了什么。

提前感谢您的帮助, 瑞西。

1 个答案:

答案 0 :(得分:1)

你的问题在于对loader类的理解。首先,每个图像需要一个不同的加载器,使用一个加载器最终会导致加载器的内容成为最后加载的图像。其次,你试图将相同的加载器添加到它的容器两次,所以看起来它只添加了一个加载器,但事实是,它添加了相同的加载器两次! 帮助:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html

底线是,对单独的图像使用单独的加载器。 希望它有所帮助,Marton

这就是我的意思:

public class Model extends EventDispatcher {

    var _setCartes:Array;

    public function Model(target:Stage){
        _setCartes = new Array();
        ImportImg();
    }

    public function ImportImg():void{

        for (var i:int = 0; i < 13; i++)
        {
            var imgcontainer:Loader = new Loader(); //create a new loader for every iteration
            imgcontainer.load(new URLRequest("img/" + i + ".png"));
            _setCartes.push(imgcontainer);
            trace(_setCartes);
        }

    }

    public function get setcartes():Array {

        return _setCartes;

    }

}

请记住,加载器需要时间来加载图像,png-s将无法立即使用。为了避免这种情况,请将其用于每个装载程序以检查它们是否已完成。

myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myCompleteHandler);

我使用的一件事是跟踪需要加载的图像数量,为每个完成的加载器减去一个,并在此数字达到零时声明加载完成。