AS3和MVC:在阵列中导入多个图像

朱西

我正在使用MVC制作纸牌游戏。我知道在我的情况下使用MVC是多余的,我正在使用它是因为我需要学习它。

这是我的问题:在我的模型中,我要导入多张存储在阵列(我的纸牌)中的图像。然后,我需要在视图中访问此数组,以便为​​每个图像添加子对象。

模型 :

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;


    }

两件事出了问题:

  • 首先,数组中的每个元素都显示相同的图像。如果我添加了Child _setCartes [5]或_setCartes [3]或_setCartes [0]或其他内容,它将始终显示同一张卡片,就像在阵列中存储了13张相同的图像一样。

  • 其次,我不能同时将_setCartes [5]和_setCartes [3]都添加到Child,仅显示第二个。我试图将数组的每个元素存储在不同的Sprite中,并将addSp分别存储在每个Sprite中,但是它什么也没显示。当我跟踪Sprite时,它说“ Object Sprite”(当我跟踪数组时,它显示13“ Object Loader”),但是舞台上什么也没有出现。

我不明白我在做什么错。

预先感谢您的帮助,Jussy。

马尔顿·帕拉吉(Marton Pallagi)

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

最重要的是,请使用单独的加载程序获取单独的图像。希望对您有帮助,马尔顿

这就是我要怎么做:

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);

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章