-
Notifications
You must be signed in to change notification settings - Fork 0
/
SpriteSheet.as
77 lines (61 loc) · 2.3 KB
/
SpriteSheet.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package
{
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;
public 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, 0x000000);
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, 0x000000);
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();
}
}
}