PDA

Просмотр полной версии : Как сделать стерку через BlendMode.ERASE?


Astraport
11.06.2012, 15:45
В рисовалке 2 режима - рисование линиями и стирание. Пытаюсь реализовать второе через BlendMode.ERASE, но как-то не работает... Нужно чтобы eraser создавал стирающий след по тем линям что нарисованы drawingLine. maskLine - не отображается, нужна для другого.


private var con:Sprite = new Sprite();
private var drawingLine:Sprite = new Sprite();
private var maskLine:Sprite = new Sprite();
private var eraser:Shape = new Shape();

con.cacheAsBitmap = true;
eraser.cacheAsBitmap = true;
eraser.graphics.beginFill(0xff0000, 0.5);
eraser.graphics.drawCircle(0, 0, brushSize);
eraser.graphics.endFill();
eraser.blendMode= BlendMode.ERASE;

this.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
this.addEventListener(MouseEvent.MOUSE_UP,onUp);

protected function onDown(ev:MouseEvent):void {
if(brushMode){
con.addChild(drawingLine);
drawingLine.graphics.lineStyle(brushSize, brushColor, 0.5);
drawingLine.graphics.moveTo(mouseX, mouseY);
maskLine.graphics.lineStyle(brushSize, brushColor, 1);
maskLine.graphics.moveTo(mouseX, mouseY);
this.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
} else {
drawingLine.addChild(eraser);
this.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
}
}

protected function onUp(ev:MouseEvent):void {
this.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
}

protected function onMove(ev:MouseEvent):void {
if (brushMode){
drawingLine.graphics.lineTo(mouseX, mouseY);
maskLine.graphics.lineTo(mouseX, mouseY);
} else {
eraser.x = mouseX;
eraser.y = mouseY;
}
}

Добавлено через 15 минут
Опять поторопился. Конечно, нужно рисовать линии eraser также как и drawingLine. При том в 2-х вариантов - для отображения и для маски.

in4core
11.06.2012, 16:04
А что фон не однородный у вас ? Рисуйте просто цветом фона вот и все :)

udaaff
11.06.2012, 17:38
http://www.flasher.ru/forum/showthread.php?t=128781

Inet_PC
11.06.2012, 17:46
eraser.blendMode= BlendMode.ERASE;
Чтобы это работало нужно, чтобы у слоя, на котором лежит eraser, свойство blendMode = BlendMode.LAYER;

Astraport
11.06.2012, 20:11
Спасибо, ребята. Я практически сразу разобрался. Постоянно корю себя, что помыкавшись 5 мин. уже лезу с вопросами вместо того чтобы нормально потестировать, поискать решения.

Добавлено через 31 секунду
Чтобы это работало нужно, чтобы у слоя, на котором лежит eraser, свойство blendMode = BlendMode.LAYER;
Как оказалось, это не обязательно.