Hola de nuevo, ahora les vengo con un problema diferente... resulta que en esta pagina encontre una clase para sacar un area de un bitmap mas grande y tiene una funcion para dibujar solo el pedaso que yo quiera y guardarlo en un bitmapData... ahora, todo bien pero al tratar de usar esa funcion solo me dibuja el primer cuadro de mi tilesheet aunque le pase los valores del cuadro #2 o #3
Esta es la imagen que cargo con el loader
Y estas las clases que ocupo

La que consegui de la pagina

Código ActionScript :

package com.bensilvis.spriteSheet
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
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)
{
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);

addEventListener(Event.REMOVED_FROM_STAGE, remove);
}

public function drawTile(tileNumber:int):BitmapData
{
tileRectangle.x = int((tileNumber % rowLength)) * tileWidth;
tileRectangle.y = int((tileNumber / rowLength)) * tileHeight;
canvasBitmapData.copyPixels(tileSheetBitmapData, tileRectangle, tilePoint);

return canvasBitmapData.clone();
}

public function tileBoard(boardIndex:Array):BitmapData
{
var wide:int = boardIndex[0].length;
var tall:int = boardIndex.length;

canvasBitmapData = new BitmapData((tileWidth * wide), (tileHeight * tall), true);
var boardCanvas:Bitmap = Bitmap(getChildAt(0));
boardCanvas.bitmapData = canvasBitmapData;

tileRectangle = new Rectangle(0, 0,(tileWidth * wide), (tileHeight * tall));
for (var i:int = 0; i < wide; i++) {
for (var j:int = 0; j < tall; j++) {
tilePoint = new Point((tileWidth * i), (tileHeight * j));

drawTile(boardIndex[j][i]);
}
}
return canvasBitmapData.clone();
}

public function remove(e:Event):void
{
tileSheetBitmapData.dispose();
canvasBitmapData.dispose();
}
}
}


la clase bloque (que sirve para dibujar el bloque que quiera en el ecenario)

Código ActionScript :

package src {
   import flash.display.Bitmap;
   import flash.display.BitmapData;
   import flash.display.Loader;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.geom.Matrix;
   import flash.net.URLRequest;
   
   public class Bloque extends Sprite {
      
      private var _loader:Loader = new Loader();

      public function Bloque()
      {
         _loader.load(new URLRequest("terreno.png"));
         _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, cargaCompleta);
      }
      
      private function cargaCompleta(e:Event):void
      {
         var spritesheet:SpriteSheet = new SpriteSheet(e.target.content);
          var mySprite:Sprite = new Sprite();
            var myBitmap:BitmapData = spritesheet.drawTile(2);

            myBitmap.draw(_loader, new Matrix());

            var matrix:Matrix = new Matrix();
         matrix.scale(4, 4);

            mySprite.graphics.beginBitmapFill(myBitmap, matrix, false);
            mySprite.graphics.drawRect(x, y, 16*4, 16*4);
            mySprite.graphics.endFill();

            addChild(mySprite);
      }

   }
   
}


Y solo creo una instancia d bloque en el main asi:

Código ActionScript :

var bloque1:Bloque = new Bloque();
addChild(bloque1);


el problema esque quiero dibujar el tile #2 de mi spritesheet pero me dibuja el primero siempre

ojala me puedan ayudar