я бы собирал эти тайлы 'на лету' из 9ти элементов
навскидку попробовал упрощенный вариант,
на самом деле все будет сложнее из-за линий каймы, но всяко проще, чем собирать из готовых, да и многовато их нужно, имхо 256(2^8), ну может за вычетом каких-то нереальных, но никак не 12 же
Код AS3:
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.geom.Rectangle;
public class Main extends Sprite
{
private var size:Number = 30;
private var srcRounded:Sprite = new Sprite();
private var srcCorner:Sprite = new Sprite();
public function Main():void
{
stage.scaleMode = StageScaleMode.NO_SCALE;
srcRounded.graphics.beginFill(0xC0C0C0);
srcRounded.graphics.drawRoundRect(0, 0, size, size, 0.5 * size, 0.5 * size);
//srcRounded.graphics.endFill();
//srcRounded.graphics.lineStyle(1, 0);
//srcRounded.graphics.drawRoundRect(size/6, size/6, 2*size/3, 2*size/3, size/3, size/3);
srcCorner.graphics.beginFill(0xC0C0C0);
srcCorner.graphics.drawRect(0, 0, size, size);
var grid:Array = [
[0, 1, 1, 0, 0, 0, 1, 1, 0],
[1, 1, 0, 1, 1, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 0, 1, 1],
[1, 0, 1, 1, 1, 1, 1, 0, 1],
[1, 1, 1, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 0, 1, 1, 1, 0, 1, 0]]
for (var j:int = 0; j < grid.length; j++)
{
var line:Array = grid[j];
for (var i:int = 0; i < line.length; i++)
{
if (line[i])
{
var tile:Bitmap = getTile(
line[i - 1],
grid[j - 1] ? grid[j - 1][i] : 0,
line[i+1],
grid[j + 1] ? grid[j + 1][i] : 0
);
tile.x = size * i;
tile.y = size * j;
addChild(tile);
}
}
}
}
private function getTile(l:Boolean,t:Boolean,r:Boolean,b:Boolean):Bitmap
{
var bmd:BitmapData = new BitmapData(size, size, true, 0);
drawSegm(bmd, 0, 0, l || t);
drawSegm(bmd, 1, 0, t);
drawSegm(bmd, 2, 0, r || t);
drawSegm(bmd, 0, 1, l);
drawSegm(bmd, 1, 1, false);
drawSegm(bmd, 2, 1, r);
drawSegm(bmd, 0, 2, l || b);
drawSegm(bmd, 1, 2, b);
drawSegm(bmd, 2, 2, b || r);
return new Bitmap(bmd);
}
private function drawSegm(bmd:BitmapData, i:int, j:int, corner:Boolean):void
{
var s:Number = size / 3;
var rec:Rectangle = new Rectangle(i * s, j * s, s, s);
var src:Sprite = corner ? srcCorner : srcRounded;
bmd.draw(src, null, null, null, rec);
}
}
}
|