2013-09-01 4 views
0

Я делаю карточную игру с использованием MVC. Я знаю, что в моем случае использование MVC слишком велико, я использую его, потому что мне нужно его изучить.AS3 & 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; 


    } 

Две вещи идут неправильно:

  • Во-первых, каждый элемент моего массива показывает такой же изображение. Если я добавлю # setCartes [5] или _setCartes [3] или _setCartes [0] или что угодно, он всегда будет показывать ту же карточку, как если бы она содержала 13 x одного и того же изображения в моем массиве.

  • Во-вторых, я не могу добавитьChild как _setCartes [5], так и _setCartes [3], покажет только второй. Я пытался запасти каждый элемент моего массива в разных Sprites и addChild каждый спрайт, но ничего не показывал. Когда я проследил Sprite, он сказал «Object Sprite» (когда я трассирую массив, на котором показано 13 «Object Loader»), но ничего не появляется на сцене.

Я не понимаю, что я делаю неправильно.

Заранее благодарю вас за помощь, Jussy.

ответ

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

Одна вещь, я использую является отслеживание количества изображений, необходимых для загрузки, вычесть один для каждого готового погрузчика, и объявить погрузка закончена, когда это число достигает нуля.

+0

Большое спасибо, это было очень полезно !! – Jussy

Смежные вопросы