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
