Преамбула:
Частенько, для проверки объектов с прозрачностью, нужно было подкладывать что то пёстрое под них для того, чтобы лучше их визуально оценить. Приходилось каждый раз делать каляки-маляки в graphics низлежащего Shape/Sprite-а.
Не соврать, подобные каляки называются "transparency grid" или check-текстурой/заливкой в случае 3D-контекста.
Проблема:
Не заморачиваясь, легко и задорно создавать "transparency grid" в поданном на вход экземпляр Graphics.
Решение:
Не мудрствуя лукаво, решил сделать "transparency grid" как в фотошопе + задать возможность кастомизации параметров этой текстуры (на всякий случай).
Конечный результат приведенного ниже кода:

Частенько, для проверки объектов с прозрачностью, нужно было подкладывать что то пёстрое под них для того, чтобы лучше их визуально оценить. Приходилось каждый раз делать каляки-маляки в graphics низлежащего Shape/Sprite-а.
Не соврать, подобные каляки называются "transparency grid" или check-текстурой/заливкой в случае 3D-контекста.
Проблема:
Не заморачиваясь, легко и задорно создавать "transparency grid" в поданном на вход экземпляр Graphics.
Решение:
Не мудрствуя лукаво, решил сделать "transparency grid" как в фотошопе + задать возможность кастомизации параметров этой текстуры (на всякий случай).
Конечный результат приведенного ниже кода:

/**
* Рисует check-текстуру
* @param canvas - экземпляр класса Graphics
* @param width - ширина требуемой текстуры
* @param height - высота требуемой текстуры
* @param cellSize - размер ячейки
* @param cellColors - массив с цветами для нечетной и четной ячеек в формате RGBA
* @param lineColor - цвет линии между ячейками в формате RGBA
*/
public function drawCheckFill(canvas:Graphics, width:Number, height:Number, cellSize:Number, cellColors:Array = null, lineColor:uint = 0x080808FF):void
{
var colors:Array = cellColors || [0x111111FF, 0x202020FF];
colors = colors.slice(0, 2);
var cols:int = int(width / cellSize);
var rows:int = int(height / cellSize);
var color:uint = 0;
for (var i:int = 0; i < cols; i++)
{
for (var j:int = 0; j < rows; j++)
{
color = colors[(i + j) % 2];
canvas.beginFill(color >> 8, (color & 0x000000FF) / 0xFF);
canvas.drawRect(i * cellSize, j * cellSize, cellSize, cellSize);
}
}
canvas.endFill();
canvas.lineStyle(1, lineColor >> 8, (lineColor & 0x000000FF) / 0xFF, true, LineScaleMode.NORMAL, CapsStyle.NONE);
for (i = 0; i < cols; i++)
{
canvas.moveTo(i * cellSize, 0);
canvas.lineTo(i * cellSize, rows * cellSize);
}
for (i = 0; i < rows; i++)
{
canvas.moveTo(0, i * cellSize);
canvas.lineTo(cols * cellSize, i * cellSize);
}
}
var shape:Shape = new Shape();
drawCheckFill(shape.graphics, 170, 170, 8, [0XFFFFFFFF, 0xCCCCCCFF], 0);
P.S.: Кстати для создания текстур для материалов 3D-движков тоже сгодится.
Комментариев нет:
Отправить комментарий