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

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

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

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Tools Как зделать, чтобы в рисовалке не заламывались линии при быстром перемещении мыши?

Добрый день! Вот делаю рисовалку, и всегда у меня линии при быстром движении мыши, заламываются. Попробовал двумя способами, и все впустую.

1)

Код AS1/AS2:
var stoke:Number = 2;
var alpha:Number = 100;
var color:Number = 0xFF0000;
var color2:Number = 0x000000;
var drawing:Boolean = false;
var mLst:Object = new Object();
 
 
Mouse.hide();
crop.startDrag(true, 0, 0, Stage.width, Stage.height);
 
this.lineStyle(stoke, color, alpha);
place.lineStyle(stoke, color2, alpha);
 
mLst.onMouseDown = function() {
		drawing = true;
		_root.moveTo(_xmouse, _ymouse);
}
 
mLst.onMouseUp = function() {
	drawing = false;
}
 
mLst.onMouseMove = function() {
	if(drawing) {
		_root.lineTo(_xmouse, _ymouse);
	}
	updateAfterEvent();		
}
 
Mouse.addListener(mLst);
2)

Код AS1/AS2:
var stoke:Number = 2;
var alpha:Number = 100;
var color:Number = 0xFF0000;
var color2:Number = 0x000000;
var drawing:Boolean = false;
var mLst:Object = new Object();
 
 
Mouse.hide();
crop.startDrag(true, 0, 0, Stage.width, Stage.height);
 
this.lineStyle(stoke, color, alpha);
place.lineStyle(stoke, color2, alpha);
 
mLst.onMouseDown = function() {
		drawing = true;
		_root.moveTo(_xmouse, _ymouse);
		sss = setInterval(Drawing, 1);
}
 
mLst.onMouseUp = function() {
	drawing = false;
	clearInterval(sss);
}
 
function Drawing() {
	if(drawing) {
		_root.lineTo(_xmouse, _ymouse);
	}
}
Mouse.addListener(mLst);
Различие в том, что я заменил onMouseMove а setInterval т.к. у певрого, обновление происходит ~ раз в 50 миллисекунд, а во втором, я заставил обновляться каждую 1 миллисекунду. Но заметных отличий, в итоге не видно.

[IMG]http://img146.**************/img146/8576/lomxm4.jpg[/IMG]

Быть может кто-то делал, нечто подобное? Помогите пожалуйста.
Спасибо.
__________________
Убейте меня!

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Сам такого не делал, но думаю можно попробовать заюзать curveTo. Или самому реализовать, кривые Безье например.
__________________
while(1) {}

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

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
curveTo либо некатят, либо я слишком хреново знаю матемшу. Разници вообще не заметил:

Код AS1/AS2:
var n = 1;
var drawing = false;
var xStart
var yStart
 
_root.onMouseDown = function() {
	if (_ymouse<400) {
		_root.lineStyle(th, rgb, al);
		_root.moveTo(_xmouse, _ymouse);
		xStart = _xmouse;
		yStart = _ymouse;
		Dr = true;
		Mouse.hide();
		_root.attachMovie("pen", "pen", 0);
		pen.startDrag(true);
	}
}
 
_root.onMouseUp = function() {
	drawing = false;
	n = 1;
	pen.removeMovieClip();
	Mouse.show();
}
 
_root.onMouseMove = function() {
	if (drawing) {
		if (n == 1) {
			Xpos = _xmouse;
			Ypos = _ymouse;
			n = 2;
		} else {
			var xSr = (_xmouse+xStart)/2;
			var ySr = (_ymouse+yStart)/2;
			var ControlX = 2*Xpos-xSr;
			var ControlY = 2*Ypos-ySr;
			_root.curveTo(ControlX, ControlY, _xmouse, _ymouse);
			n = 1;
		}
	}
	xStart = _xmouse;
	yStart = _ymouse;
}
А что такое кривые Безье?
__________________
Убейте меня!

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
http://ru.wikipedia.org/wiki/Кривая_Безье
Сейчас нету времени посмотреть твой код, быть может под вечер смогу. Хотя обещать не буду.
__________________
while(1) {}

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

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

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


 


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


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