我正在使用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”),但是舞台上没有任何内容。
我不明白我做错了什么。
提前感谢您的帮助, 瑞西。
答案 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);
我使用的一件事是跟踪需要加载的图像数量,为每个完成的加载器减去一个,并在此数字达到零时声明加载完成。