2013-05-06 1 views
0

J'ai cette fonction d'Internet qui découpe une image en une pièce comme des tuiles et les place dans un tableau (linéaire ou multidimensionnel).Ajout de plusieurs MovieClip du tableau

--- --- Exemple

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

C'est donc la fonction:

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

Je suis en train d'ajouter à l'étape ceux partie de l'image découpée en des endroits différents avec une fonction comme celui-ci (voir la dernière si):

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

Il y a un problème avec CELL3 (qui utilisent l'image en tranches) parce que je Il semble que j'utilise la même image et ne la duplique pas sur ma scène, donc si je l'ai 4 fois sur ma carte, elle ne montrera que l'image sur la dernière tuile.

Je voulais faire:

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

, mais il ne sera pas accepter ma « nouvelle » cause ne est pas une classe.

Une idée de comment je peux travailler ça? Comment puis-je définir mon tableau movieclip à une classe ou quelque chose .. Je suis un débutant en as3

Répondre

0

Compte tenu de vos images en tranches utiliser un seul objet Bitmap, le mieux que vous pouvez faire avec ceci est de cloner un bitmap dans un nouveau 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 ... après 10 heures de recherche sur le net et tout ce que vous arrivez comme la lumière dans le ciel. Je t'aime tellement. Cela a bien fonctionné! Je n'aurais jamais deviné que ... j'essayais de trouver un moyen d'instancier ou d'essayer de copier mon MovieClip en classe (ouais j'étais loin dans mon monde). Merci beaucoup! Apprendre tous les jours! – Aenil

+0

Et j'aime ton nom aussi. C'est comme Vesper dans ultima en ligne! : P – Aenil

+0

Hmm :) A l'origine c'était Vesper de Heroes of Might & Magic 2 - j'ai aimé son portrait. – Vesper

Questions connexes