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

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

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

Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
Question Разрывы в рисование с помощью Bitmap

Здравствуйте.

Передо мной была поставлена задача сделать «рисовалку» на AS3. По нескольким причинам я решил делать программное рисование не через graphic.lineTo, а через BtimapData и draw. Основными причинами к этому были:

1) Нестандартные «кисти» с размытыми краями.
2) Возможность «стирать» нарисованное.

За саму часть рисования у меня отвечает следующий код:
Код AS3:
function onMouseMove(event:MouseEvent) {
	if (this.instrument_mc) {
		this.instrument_mc.x = Main.stage.mouseX;
		this.instrument_mc.y = Main.stage.mouseY;
		//
		if (event.buttonDown) {
			this.toDraw();
		}
	}
}
function onMouseDown(event:MouseEvent) {
	this.toDraw();
}
Блок:
Код AS3:
if (this.instrument_mc) {
Проверяет наличие инструмента для рисования «в руке».

А блок с:
Код AS3:
if (event.buttonDown) {
Проверяет нажата ли кнопка мышки. Если все условия выполняются, то запускается функция toDraw(), в которой и реализован механизм рисования. Механизм примерно такой:

Код AS3:
this.matrix.tx = toX;
this.matrix.ty = toY;
this.bitmap.draw(_mc, this.matrix, this.colorTransform, instrumentBlendMode);
_mc — это клип, которым рисуем, то есть, те самые «кисточки».
instrumentBlendMode — бывает BlendMode.NORMAL и BlendMode.ERASE, что позволяет либо рисовать, либо стирать нарисованное.

Но это всё было отступлением, проблема заключается в том, что если быстро вести мышкой при зажатой кнопке, то линия получается обрывистой, что видно на следующем скриншоте:



На картинке, быстрее всего была проведена верхняя линия, две линии ниже идут по уменьшению скорости.

Вот и вопрос, есть ли способ с этим как-то бороться, или же стоит смотреть в сторону graphic.lineTo и можно ли там (graphioc.lineTo) как-то добиться размытости кистей?

Как всё работает «в живую» можно посмотреть тут (65кб, прелодера нет): http://flashist.ru/files/azat/school/index.html

P.S.:
updateAfterEvent() пробовал, не помогло. Может быть я как-то не так пробовал?
Так же пробовал, при нажатии на кнопку мыши, запускать таймер который бы вызывался 200 раз в секунду и рисовал Btimap, а при отпускании кнопки мышки таймер бы приостанавливался. Тоже не помогло. Может быть опять как-то не так пробовал?

UPD.:
Изменять количество FPS до максимальных 120 тоже пробовал, тоже не помогло =(


Последний раз редактировалось koIIImarik; 16.03.2009 в 02:38.
Создать новую тему   Часовой пояс GMT +4, время: 23:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
bitmap , рисование

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

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


 


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


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