// instructions
var ins:Array = [0,
-1, 100, 200, 3, 100, 0, 50, 1, 100, -1, 100, 150, 0, 50,
-1, 160, 200, 0, 50, 3, 50, 2, 50, 3, 50, 0, 50,
-1, 220, 200, 0, 50, 3, 50, 2, 50, -1, 270, 150, 3, 50, 2, 50];
var canvas:BitmapData = new BitmapData(400,400,false, 0xCCCCCC);
addChild(new Bitmap(canvas));
var index:int = 0;
var penX:int = 0;
var penY:int = 0;
read();
function read():void{
var i:int, xp:int, yp:int;
if (ins[index+1] == -1){
index++;
xp = ins[++index];
yp = ins[++index];
}else{
xp = penX;
yp = penY;
}
var dir:int = ins[index];
var leng:int = ins[++index];
for (i = 0; i<leng; i++){
if (dir == 0){
xp += 1;
}else if (dir == 1){
yp += 1;
}else if (dir == 2){
xp -= 1;
}else if (dir == 3){
yp -= 1;
}
canvas.setPixel(xp, yp, 0x000000);
}
penX = xp;
penY = yp;
if (index < ins.length){
read();
}
}
I was thinking today about alternative ways to represent drawings and I wrote this snippet while brainstorming. The function read() looks through an array of instructions (ins[]) and draws an image. In this case the letters AS3 are drawn to a Bitmap using setPixel().
The instructions work like this:
The first value of the array is ignored – it can be set to 0, or used to store some other info.
If the next value is a -1, the following two values in the array are used as a sort of moveTo().
This is followed by a direction value 0 = right, 1 = down, 2 = left, 3 = up.
Lastly there is a length value in pixels.
If no -1 is found, the read() function assumes that the value is for a direction.
So to draw a line from (100, 100) to (150, 100) you would write:
[0, -1, 100, 100, 0, 50]
To then draw a line down 50 pixels from the endpoint of the previous line you would add 1 (move down), 50 (length 50)… so you to end up with:
[0, -1, 100, 100, 0, 50, 1, 50]
and so on…
I’m not sure really where I was going with this, but it was fun to write…