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

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

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

Регистрация: Jun 2005
Адрес: Санкт-Петербург
Сообщений: 159
По умолчанию программное рисование пунктирной линии

Как я понимаю у метода lineStyle объекта MovieClip нет свойства типа линии. Т.е. пунктирную линию придется рисовать как линию состоящую из кусочков (цвет линии и цвет фона)? Или нет?

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

Регистрация: Apr 2001
Адрес: Kiev-Simferopol
Сообщений: 133
Если линия прямая и без загибов, вертикальная или горизонтальная -- можно просто программно сдублировать мувиклип черточки нужное количество раз. если линия идет по-диагонали - задача усложняется разворотом клипиков на нужный градус.
с клипами точек - заморочек меньше.

Но есть в этом и оборотная сторона, по ходу: много клипиков могу перенагружать плейер - тем более, если рядом шуршит ресурсоемкая анимация.
__________________
Понять - значит упростить. Хорошо понять - сделать самому.

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

Регистрация: Jun 2005
Адрес: Санкт-Петербург
Сообщений: 159
ясно, спасибо.... перегрузка плейера - это ваще полная ж... =)))

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

Регистрация: Apr 2001
Адрес: Kiev-Simferopol
Сообщений: 133

просто сталкивался как-то с такой фигней... заказчик уперся рогом - дескать, хочу пунктир на динамических менюшках - и вот хоть что.
выкрутились именно дублированием точек и выносом анимации за рамки этих самых точек. вроде прокатило.
__________________
Понять - значит упростить. Хорошо понять - сделать самому.

Старый 20.07.2005, 13:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Ив написал:

Код:
this.setShapeSelectorClass = function () {
	delete this.setShapeSelectorClass;
	var ShapeSelector = function () {
		this.shift = this.shift;
		this.points_array = [];
		ASSetPropFlags (this, "shift", 1, 1);
	};
	// create (static)
	ShapeSelector.create = function (thisObject, name, depth, initObject) {
		var mc = thisObject.createEmptyMovieClip (name, depth);
		mc.__proto__ = this.prototype;
		for (var i in initObject) {
			mc[i] = initObject[i];
		}
		this.call (mc);
		return mc;
	};
	var tmp = ShapeSelector.prototype = new MovieClip ();
	// private
	tmp.shift = 0;
	// properties. defaults
	tmp.closed = true;
	tmp.gap = 5;
	tmp.line = 10;
	tmp.speed = 1;
	tmp.width = 0;
	tmp.height = 0;
	tmp.thickness = 0;
	tmp.color = 0;
	tmp.alpha = 100;
	tmp.closeShape = function () {
		this.closed = true;
	};
	tmp.addPoint = function (x, y) {
		if (this.closed) {
			this.closed = false;
			this.points_array = [];
		}
		this.points_array.push ({_x:x, _y:y});
	};
	// redraw
	tmp.onEnterFrame = function () {
		this.clear (), this.lineStyle (this.thickness, this.color, this.alpha);
		var shift = this.shift += this.speed;
		var arr = this.points_array;
		var len = arr.length;
		if (len < 2) {
			return;
		}
		for (var i = 1; i < len; i++) {
			shift = dashFromTo (this, arr[i - 1]._x, arr[i - 1]._y, arr[i]._x, arr[i]._y, shift) || 0;
		}
		if (this.closed) {
			dashFromTo (this, arr[len - 1]._x, arr[len - 1]._y, arr[0]._x, arr[0]._y, shift) || 0;
		}
	};
	// private: shifted dashed line drawing
	var dashFromTo = function (mc, sx, sy, ex, ey, shift) {
		var line = mc.line, gap = mc.gap;
		var dx = ex - sx, dy = ey - sy;
		var dist = Math.sqrt (dx * dx + dy * dy);
		var sin = dy / dist, cos = dx / dist;
		var poz = 0, step = (line + gap);
		shift = (shift % step + step) % step;
		mc.moveTo (sx, sy);
		if (shift) {
			if (shift > gap) {
				poz = (shift - gap);
				if (poz > dist) {
					mc.lineTo (dist * cos + sx, dist * sin + sy);
					return poz + gap - dist;
				}
				mc.lineTo (poz * cos + sx, poz * sin + sy);
				poz += gap;
			} else {
				poz = shift;
				if (poz > dist) {
					mc.moveTo (dist * cos + sx, dist * sin + sy);
					return poz - dist;
				}
			}
			mc.moveTo (poz * cos + sx, poz * sin + sy);
		}
		while (Math.abs (poz) < dist) {
			poz += line;
			if (poz > dist) {
				mc.lineTo (dist * cos + sx, dist * sin + sy);
				return poz + gap - dist;
			}
			mc.lineTo (poz * cos + sx, poz * sin + sy);
			poz += gap;
			if (poz > dist) {
				mc.moveTo (dist * cos + sx, dist * sin + sy);
				return poz - dist;
			}
			mc.moveTo (poz * cos + sx, poz * sin + sy);
		}
		return poz - dist;
	};
	_global.org = _global.org || {};
	_global.org.dembicki = _global.org.dembicki || {};
	_global.org.dembicki.ShapeSelector = ShapeSelector;
};
this.setShapeSelectorClass ();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                         USAGE EXAMPLE
//                         (AS1 and AS2 compatible)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// import org.dembicki.ShapeSelector;
trace ("Just draw something");
org.dembicki.ShapeSelector.create (this, "default_outline_mc", 0, {_x:sx, _y:sy});
this.onMouseDown = function () {
	this.onMouseMove = function () {
		this.default_outline_mc.addPoint (this._xmouse, this._ymouse);
	};
	this.onMouseUp = function () {
		this.default_outline_mc.closeShape ();
		delete this.onMouseMove;
		delete this.onMouseUp;
	};
};
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 20.07.2005, 13:08
KUZEN вне форума Посмотреть профиль Отправить личное сообщение для KUZEN Посетить домашнюю страницу KUZEN Найти все сообщения от KUZEN
  № 6  
Ответить с цитированием
KUZEN
Ветеран форума
 
Аватар для KUZEN

Регистрация: Jun 2005
Адрес: MOSCOW
Сообщений: 6,852
Отправить сообщение для KUZEN с помощью ICQ Отправить сообщение для KUZEN с помощью Yahoo Отправить сообщение для KUZEN с помощью Skype™
Прикольная штуковина , помнится Ваня показывал её на одном из семинаров в RealTime ...
__________________
BestMasterиZация

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

Регистрация: Jun 2005
Адрес: Санкт-Петербург
Сообщений: 159
да и не говори, тема на 100 баллов =)))

Старый 20.07.2005, 13:46
KUZEN вне форума Посмотреть профиль Отправить личное сообщение для KUZEN Посетить домашнюю страницу KUZEN Найти все сообщения от KUZEN
  № 8  
Ответить с цитированием
KUZEN
Ветеран форума
 
Аватар для KUZEN

Регистрация: Jun 2005
Адрес: MOSCOW
Сообщений: 6,852
Отправить сообщение для KUZEN с помощью ICQ Отправить сообщение для KUZEN с помощью Yahoo Отправить сообщение для KUZEN с помощью Skype™
У IV`a подругому не бывает )))
__________________
BestMasterиZация

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

Регистрация: Apr 2001
Адрес: Kiev-Simferopol
Сообщений: 133
ага... как он меня однажды красиво просветил по поводу инициализации классов - благодарность ему ну просто безразмерная.
__________________
Понять - значит упростить. Хорошо понять - сделать самому.

Старый 20.07.2005, 14:36
2GoDoom вне форума Посмотреть профиль Отправить личное сообщение для 2GoDoom Найти все сообщения от 2GoDoom
  № 10  
Ответить с цитированием
2GoDoom

Регистрация: Jul 2005
Сообщений: 14
Отправить сообщение для 2GoDoom с помощью ICQ
с кучей мувиклипов - будет тормозить..
эм...
если по прямой - то почему бы не воспользоваться moveTo() lineTo() (в цикле)?
если по кривой, то впринципе то же самое, только нужно алгоритм продумывать...

P.S.
Вот за 4 минуты накидал... И это при том что я тока третий день ковыряю флеш

Код:
if(interval==NULL) {
var interval = 10; //Интервал между линиями.
var line = 10; //Длина линии.
var lenght = 500; //Длина, который покрывает весь пунктир.
var sx = 20; //Стартовая точка X
var sy = 20; //Стартовая точка Y
var dir = "hor"; //Направление. Вертикально чертить пунктир или горизонтально ( hor | var )
lineStyle(1,0x000000,100); //Стиль вашей линии (толщина, цвет, альфа).
var times = int(lenght/(line+interval)); // Это и все что дальше - не трогать.
}
moveTo(sx,sy);
while(times>0) {
 if(dir=="hor") {
 if(queue==1) {
		moveTo(sx+interval,sy);
		sx=sx+line;
		queue=0;
 } else {
		lineTo(sx+line,sy);
		sx=sx+line;
		queue=1;
 }
 }
 if(dir=="ver") {
 if(queue==1) {
		moveTo(sx,sy+interval);
		sy=sy+line;
		queue=0;
 } else {
		lineTo(sx,sy+line);
		sy=sy+line;
		queue=1;
 }
 }
 times--;
}
Вот... пользуйтесь если кому нада.. впринципе сделать с кривыми - тож не сложно...

Как применять? Просто создаете два кадра (ну или мувиклип с двумя кадрами (но только один ключевой)) и вставляете туда этот код, чут ьменяете переменные и все...


Последний раз редактировалось 2GoDoom; 20.07.2005 в 14:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 06:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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