2013-05-06 3 views
0

Я получил эту функцию из Интернета, которая нарезает изображение на части подобно плиткам и помещает их в массив (линейный или многомерный).Добавление нескольких мувиклипов из массива

--- Пример ---

var sliceClips:Array = sliceMovieClip({source:sourceMovieClip, target:tilesContainer, cols:7, rows:5}).linear; 

Так это функция:

private function sliceMovieClip(o:Object):Object 
    { 
     var returnArray:Array = new Array(); 
     var arrayLinear:Array = new Array(); 
     var array2D:Array = new Array(); 
     var cols:uint = o.cols; 
     var rows:uint = o.rows; 
     var tileWidth:uint = o.source.width/cols; 
     var tileHeight:uint = o.source.height/rows; 
     var rect:Rectangle = new Rectangle(0,0,tileWidth,tileHeight); 
     var pnt:Point = new Point(); 
     var imageBMPD:BitmapData = new BitmapData(o.source.width,o.source.height,true,0x000000); 
     var imageBMP:Bitmap = new Bitmap(imageBMPD); 
     imageBMPD.draw(o.source); 

     for (var tY:uint = 0; tY < rows; tY++) 
     { 
      var arrayRow:Array = new Array(); 
      for (var tX:uint = 0; tX < cols; tX++) 
      { 
       var sourceRect:Rectangle = new Rectangle(tX * tileWidth,tY * tileHeight,tileWidth,tileHeight); 
       var destPoint:Point = new Point(0,0); 
       var tileBMPD:BitmapData = new BitmapData(tileWidth,tileHeight,true,0x000000); 
       var tileBMP:Bitmap = new Bitmap(tileBMPD); 
       var tileMCL:MovieClip = new MovieClip(); 
       tileMCL.addChild(tileBMP); 
       tileBMPD.copyPixels(imageBMPD, sourceRect, destPoint); 
       tileMCL.x = tX * tileWidth; 
       tileMCL.y = tY * tileHeight; 
       o.target.addChild(tileMCL); 
       returnArray.push(tileMCL); 
       arrayRow.push(tileMCL); 
      } 
      array2D.push(arrayRow); 
     } 
     return {linear:arrayLinear, multi:array2D}; 
    } 

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

private function buildMap(e:Event):void 
    { 
     for (var i:int=0; i<visAreaY; i++) 
     { 
      for (var u:int=0; u<visAreaX; u++) 
      { 
       if ((MapID[i][u]) == 0) 
       { 
        var cell:MovieClip = new tile(); 
        cell.gotoAndStop(MapID[i][u]+1); 
        cell.x = tileSide * u; 
        cell.y = tileSide * i; 
        addChild(cell); 
       } 
       if ((MapID[i][u]) == 1) 
       { 
        var cell2:MovieClip = new blacksquare(); 
        cell2.gotoAndStop(MapID[i][u]+1); 
        cell2.x = tileSide * u; 
        cell2.y = tileSide * i; 
        addChild(cell2); 
       } 
       if ((MapID[i][u]) == 2) 
       { 
        var cell3:MovieClip = sliceClips[2][0]; 
        cell3.gotoAndStop(MapID[i][u]+1); 
        cell3.x = tileSide * u; 
        cell3.y = tileSide * i; 
        trace("Obj: " + cell3 + " w:" + cell3.width + " h:" + cell3.height + " pos:" + cell3.x + " " + cell3.y); 
        addChild(cell3); 
       } 
      } 
     } 
    } 

Существует проблема с CELL3 (которые используют нарезанное изображение) потому что кажется нам e то же изображение и не дублирует его на моей сцене, так что, если у меня будет 4 раза на моей карте, он покажет только изображение на последней плитке.

Я пытался сделать:

var cell3:MovieClip = new sliceClips[2][0]; 

, но он не будет принимать мой «новый» вызвать его не класс.

Любая идея, как я могу это исправить? Как я могу установить мой массив мувиклипа в класс или что-то в этом роде. Я начинаю в as3

ответ

0

Учитывая, что ваши нарезанные изображения используют один объект Bitmap, лучшее, что вы можете сделать, это клонировать растровое изображение в новый MC ,

 if ((MapID[i][u]) == 2) 
      { 
       var cell3:MovieClip = new MovieClip(); 
       cell3.addChild(new Bitmap((sliceClips[2][0].getChildAt(0) as Bitmap).bitmapData)); 
       // main magic happens here^we get the bitmapdata of source MC 
       // then make a new bitmap AND a new MC with it 
       cell3.x = tileSide * u; 
       cell3.y = tileSide * i; 
       trace("Obj: " + cell3 + " w:" + cell3.width + " h:" + cell3.height + " pos:" + cell3.x + " " + cell3.y); 
       addChild(cell3); 
      } 
+0

omg ... через 10 часов поиска в сети и все, что вы прибываете, как свет в небе. Я люблю тебя так сильно. Это сработало хорошо! Я бы никогда не догадался, что ... я пытался найти способ создать экземпляр или попытаться скопировать мой мувиклип в качестве класса (да, я был далеко в своем мире). Большое спасибо! Изучайте каждый день! – Aenil

+0

И мне нравится ваше имя. Это похоже на Vesper в ultima онлайн! : P – Aenil

+0

Хмм :) Первоначально это был Vesper от Heroes of Might & Magic 2 - мне понравился его портрет. – Vesper