0

我正在使用 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 相同的图像一样。

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

我不明白我做错了什么。

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

4

1 回答 1

1

您的问题在于对加载程序类的理解。首先,您需要为每个图像使用不同的加载器,使用一个加载器最终会导致加载器的内容是最后加载的图像。其次,您尝试将相同的加载器添加到它的容器两次,所以看起来它只添加了一个加载器,但事实是,它添加了两次相同的加载器!帮助:http ://help.adobe.com/en_US/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);

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

于 2013-09-01T15:37:10.993 回答