Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 单加载到多个精灵可能吗?_Actionscript 3 - Fatal编程技术网

Actionscript 3 单加载到多个精灵可能吗?

Actionscript 3 单加载到多个精灵可能吗?,actionscript-3,Actionscript 3,我查阅了关于这个主题的各种资源,在我看来,每个包含图像文件(png)的精灵都需要一个加载程序 我正在尝试制作一个平铺渲染系统,并创建了一个由X×Y精灵组成的网格,但它们实际上都引用了相同的图像文件。 还有别的办法吗?(使精灵共享相同的png数据文件) 我所做的一些示例代码 // Create an array of X * Y Loaders var cTileLoaders:Array = new Array( 100 ); // for example 10 by 10 grid var c

我查阅了关于这个主题的各种资源,在我看来,每个包含图像文件(png)的精灵都需要一个加载程序

我正在尝试制作一个平铺渲染系统,并创建了一个由X×Y精灵组成的网格,但它们实际上都引用了相同的图像文件。 还有别的办法吗?(使精灵共享相同的png数据文件)

我所做的一些示例代码

// Create an array of X * Y Loaders
var cTileLoaders:Array = new Array( 100 ); // for example 10 by 10 grid
var cTiles:Array = new Array( 100 );
var nIndex:int = 0;
var nImgLoadCount:int = 0;
for ( ; 100 > nIndex; ++nIndex ) {
    cTileLoaders[ nIndex ] = new Loader();
    cTiles[ nIndex ] = new Sprite();
    // perform more sprite initialization
    ....
    cTileLoaders[ nIndex ].contentLoaderInfo.addEventListener( Event.COMPLETE, ImageLoaded
    cTileLoaders[ nIndex ].Load( new URLRequest( "some image path" ) );
}
// handler for image loaded
function ImageLoaded( eEvent:Event ):void {
    ++nImgLoadCount;
    // when all 100 sprite data are loaded
    // assuming there is no i/o error
    if ( 100 == nImgLoadCount ) { 
        cTiles[ nIndex ].addChild( cTileLoaders[ nIndex ].content );
    }
}

我认为在您的情况下,答案是使用您正在加载的图像中包含的位图数据,如下所示:

var tilesWide:uint = 10;
var tilesHigh:uint = 10;

var tileHolder:Sprite = new Sprite();
this.addChild(tileHolder);

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgLoaded);
loader.load(new URLRequest("tile.png"));

function onImgLoaded(e:Event):void
{
    /* Create a template bitmap to hold the image info */
    var templateBitmap:Bitmap = e.target.content;
    var templateBitmapData:BitmapData = templateBitmap.bitmapData;

    /* Loop through your tiles */
    for (var a:uint = 0; a < tilesWide; a++)
    {
        for (var b:uint = 0; b < tilesHigh; b++)
        {
            var tile:Sprite = new Sprite();
            /* Attach the template BitmapData to each tile */
            var tileBitmap:Bitmap = new Bitmap(templateBitmapData);
            tile.addChild(tileBitmap);

            tile.x = a * tile.width;
            tile.y = b * tile.height;

            tileHolder.addChild(tile);
        }
    }
}
var tilesWide:uint=10;
var tilesHigh:uint=10;
var tileHolder:Sprite=新Sprite();
这个.addChild(tileHolder);
变量加载器:加载器=新加载器();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImgLoaded);
loader.load(新的URL请求(“tile.png”);
函数onImgLoaded(e:事件):void
{
/*创建模板位图以保存图像信息*/
var templateBitmap:Bitmap=e.target.content;
var templateBitmapData:BitmapData=templateBitmap.BitmapData;
/*穿过你的瓷砖*/
对于(变量a:uint=0;a
您也可以使用我专门为此编写的一个小库:

var tilesWide:uint = 10;
var tilesHigh:uint = 10;
var tileHolder:Sprite = new Sprite();
var tilePath:String = "some/image/path.png";

var factory:SpriteFactory = new SpriteFactory();
factory.loadBitmap("tile", tilePath);

for (var a:uint = 0; a < tilesWide; a++)
{
    for (var b:uint = 0; b < tilesHigh; b++)
    {
        var tile:Sprite = factory.newSprite("tile");                        
        tile.x = a * tile.width;
        tile.y = b * tile.height;

        tileHolder.addChild(tile);
    }
}
var tilesWide:uint=10;
var tilesHigh:uint=10;
var tileHolder:Sprite=新Sprite();
var tilePath:String=“some/image/path.png”;
变量工厂:SpriteFactory=新SpriteFactory();
工厂加载位图(“瓷砖”,瓷砖路径);
对于(变量a:uint=0;a
这里的优点是,您可以立即使用精灵,一旦加载位图,它们将自动填充位图