2009-05-06 3 views
0

Я просмотрел различные ресурсы по этой теме, и мне кажется, что мне нужен загрузчик для каждого спрайта, который содержит файл изображения (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); 
    } 
} 

ответ

2

Я думаю, что ответ в вашем случае использовать растровые данные, содержащиеся в изображении вы загружаете, как это:

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); 
     } 
    } 
} 
+0

спасибо! До недавнего времени ничего не известно о actionscript :) –

0

Вы также мог бы использовать SpriteFactory, немного библиотеки я написал специально для этого:

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

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

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