Comunidad de diseño web y desarrollo en internet online

Modificar una clase

Citar            
MensajeEscrito el 02 Nov 2011 09:48 pm
Hola a todos, pues estaba haciendo un proyecto en el que nesesito cargar un spritesheet elejir un pedaso (un sprite) y luego agrandarlo 4 veses...
consegui esta clase para tomar un sprite desde un spritesheet y mostrarlo en pantalla

Código ActionScript :


   package 
   {
       import flash.display.Bitmap;
       import flash.display.BitmapData;
       import flash.display.Sprite;
       import flash.geom.Point;
       import flash.geom.Rectangle;
    
       public class SpriteSheet extends Sprite
       {
    
           private var tileSheetBitmapData:BitmapData;
           private var canvasBitmapData:BitmapData;
    
           private var tileWidth:int;
           private var tileHeight:int;
           private var rowLength:int;
    
           private var tileRectangle:Rectangle;
           private var tilePoint:Point;
    
           public function SpriteSheet(tileSheetBitmap:Bitmap, width:Number = 32, height:Number = 32)
           {
               tileSheetBitmapData = tileSheetBitmap.bitmapData;
               tileWidth = width;
               tileHeight = height;
    
               rowLength = int(tileSheetBitmap.width / width);
    
               tileRectangle = new Rectangle(0, 0, tileWidth, tileHeight);
               tilePoint = new Point(0, 0);
    
               canvasBitmapData = new BitmapData(tileWidth, tileHeight, true);
               var canvasBitmap:Bitmap = new Bitmap(canvasBitmapData);
               addChild(canvasBitmap);
    
               drawTile(0);
           }
    
           public function drawTile(tileNumber:int):void
           {
               tileRectangle.x = int((tileNumber % rowLength)) * tileWidth;
               tileRectangle.y = int((tileNumber / rowLength)) * tileHeight;
               canvasBitmapData.copyPixels(tileSheetBitmapData, tileRectangle, tilePoint);
           }
    
       }
   }


como ven se le pasa como parametro un bitmap y las dimenciones de cada sprite

lo que quiero es modificarla para que se le pase un parametro "escala" que sea un numero entero y que con eso se multiplique el tamaño del sprite
intente acerlo pero hay un error, se encima el sprite agrandado con el normal

Código ActionScript :

package src.clases
   {
       import flash.display.Bitmap;
       import flash.display.BitmapData;
       import flash.display.Sprite;
      import flash.geom.Matrix;
       import flash.geom.Point;
       import flash.geom.Rectangle;
    
       public class SpriteSheet extends Sprite
       {
    
           private var tileSheetBitmapData:BitmapData;
           private var canvasBitmapData:BitmapData;
    
           private var tileWidth:int;
           private var tileHeight:int;
           private var rowLength:int;
    
           private var tileRectangle:Rectangle;
           private var tilePoint:Point;
    
           public function SpriteSheet(tileSheetBitmap:Bitmap, width:Number = 16, height:Number = 16, escala:int = 3)
           {
            
            var matrix:Matrix = new Matrix();
            matrix.scale(escala, escala);
            
   
               tileSheetBitmapData = tileSheetBitmap.bitmapData;
               tileWidth = width;
               tileHeight = height;
    
               rowLength = int(tileSheetBitmap.width / width);
    
               tileRectangle = new Rectangle(0, 0, tileWidth, tileHeight);
               tilePoint = new Point(0, 0);
    
               canvasBitmapData = new BitmapData(tileWidth*3, tileHeight*3);
            canvasBitmapData.draw(tileSheetBitmapData, matrix);
               var canvasBitmap:Bitmap = new Bitmap(canvasBitmapData);
               addChild(canvasBitmap);
    
               drawTile(0);
           }
    
           public function drawTile(tileNumber:int):void
           {
             tileRectangle.x = int((tileNumber % rowLength)) * tileWidth;
               tileRectangle.y = int((tileNumber / rowLength)) * tileHeight;
               canvasBitmapData.copyPixels(tileSheetBitmapData, tileRectangle, tilePoint);
           }
    
       }
   }


si me pudieran ayudar para modificar la clase y poder seguir

Por swek

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Nov 2011 02:23 am
hola,, toque un poco la clase. avisame si es lo q necesitabas:

Código ActionScript :

package src.clases
{
   import flash.display.Bitmap;
   import flash.display.BitmapData;
   import flash.display.Sprite;
   import flash.geom.Matrix;
   import flash.geom.Point;
   import flash.geom.Rectangle;
   public class SpriteSheet extends Sprite
   {
      private var tileSheetBitmapData:BitmapData;
      private var canvasBitmapData:BitmapData;
      private var tileWidth:int;
      private var tileHeight:int;
      private var rowLength:Number;
      private var tileRectangle:Rectangle;
      private var tilePoint:Point;
      public function SpriteSheet(tileSheetBitmap:Bitmap, width:Number = 16, height:Number = 16, escala:int = 3)
      {
         var matrix:Matrix = new Matrix();
         matrix.scale(escala, escala);
         
         tileSheetBitmapData = tileSheetBitmap.bitmapData;
         tileWidth = width;
         tileHeight = height;
         
         //rowLength = int(tileSheetBitmap.width / width);
         
         //a rowlength lo que le hago es sumarle uno si da fraccion. si da justo no hago nada.
         rowLength = (tileSheetBitmap.width / width);
         rowLength = rowLength - uint(rowLength);
         if (rowLength > 0)
         {
            rowLength = uint(tileSheetBitmap.width / width) + 1;
         } else
         {
            rowLength = uint(tileSheetBitmap.width / width);
         }
         
         tileRectangle = new Rectangle(0,0,tileWidth,tileHeight);
         tilePoint = new Point(0,0);
         
         canvasBitmapData = new BitmapData(tileWidth, tileHeight);
         
         drawTile(0);
         
         var bmdGrande:BitmapData = new BitmapData(width * escala, height * escala);
         bmdGrande.draw(new Bitmap(canvasBitmapData),matrix);
         
         
         var canvasBitmap:Bitmap = new Bitmap(bmdGrande);
         addChild(canvasBitmap);
         
      }
      public function drawTile(tileNumber:int):void
      {
         tileRectangle.x = int((tileNumber % rowLength)) * tileWidth;
         tileRectangle.y = int((tileNumber / rowLength)) * tileHeight;
         canvasBitmapData.copyPixels(tileSheetBitmapData, tileRectangle, tilePoint);
      }
   }
}
/**/



abz


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 04 Nov 2011 12:54 am
Valla, muchas gracias funciono bien, exepto por una cosa...
con la anterior clase si tenia un bitmap con fondo transparente dibujaba un bitmap con fondo transparente, pero cambiandole lo tuyo me dibuja un fondo blanco en donde estaria lo transparente
¿me ayudas?

Por swek

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Nov 2011 11:50 am
Asi seria para q sea transparente:

Código ActionScript :

var bmdGrande:BitmapData = new BitmapData(width * escala, height * escala, true, 0x00);
/**/


abz

eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.