Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.06.2012, 15:45
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 1  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию Как сделать стерку через BlendMode.ERASE?

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

Код AS3:
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-х вариантов - для отображения и для маски.
__________________
In Code We Trust

Старый 11.06.2012, 16:04
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
А что фон не однородный у вас ? Рисуйте просто цветом фона вот и все
__________________
Марк Tween

Старый 11.06.2012, 17:38
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
http://www.flasher.ru/forum/showthread.php?t=128781

Старый 11.06.2012, 17:46
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 4  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
eraser.blendMode= BlendMode.ERASE;
Чтобы это работало нужно, чтобы у слоя, на котором лежит eraser, свойство blendMode = BlendMode.LAYER;
__________________
http://www.chessmax.ru

Старый 11.06.2012, 20:11
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 5  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Спасибо, ребята. Я практически сразу разобрался. Постоянно корю себя, что помыкавшись 5 мин. уже лезу с вопросами вместо того чтобы нормально потестировать, поискать решения.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:15.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.