![]() |
|
||||||||||
|
|||||
|
[+ 1.11 06.02.2006]
[+ 1.11 13.11.2005] |
У меня есть мувик сложной формы (карта).
Как програмно сделать так, что бы вокруг карты появилась ее граница красного цвета? |
|
|||||
|
[+1 10.07.06]
Регистрация: Jan 2003
Сообщений: 365
|
Самый простой вариан - создать вручную мувик чуть большего размера, поместить туда аналогичную по форме карты фигуру красного цвета. Изначально установить _alpha = 0, а потом увеличить (плавно или нет) до 100.
|
|
|||||
|
[+ 1.11 06.02.2006]
[+ 1.11 13.11.2005] |
Я так пробовал, но гарницы получаются неровными. Их толщина в одном месте больше, в одном меньше. Это из за того, что карта очень неправильной формы. Есть ли иной выход?
|
|
|||||
|
Регистрация: Nov 2001
Адрес: и провыплёвывает
Сообщений: 26
|
Установи аттрибуты инструмента "линия" такими, как тебе нужно для окантовки.
Выдели свою неправильной формы карту и попробуй клацнуть на ней инструментом "чернильница". Появится обрисовка её контура линией. Потом выдели только линию и сделай из неё мувиклип. Положи его на карту и сделай ему _visible=false или _alpha=0. Потом, когда надо, делаешь его видимым. |
|
|||||
|
[+ 1.11 06.02.2006]
[+ 1.11 13.11.2005] |
Спасибо, но как это сделать все прогамно. Ведь трогать мувик вручную нельзя
|
|
|||||
|
Регистрация: Nov 2001
Адрес: и провыплёвывает
Сообщений: 26
|
Не совсем понимаю, что мешает трогать мувик (кроме отсутствия исходника
), но это не моё дело.....Есть два варианта 1. Создать сверху пустой мувик и рисовать в нём огибающую при помощи moveTo() и curveTo(), что может служить разновидностью меры наказания и надоест раньше, чем получится.... 2.Сделать копию мува-карты, расположить её под оригиналом, потм в ней посредством ColorTransform залить карту тем же красным..... Ну а потом методом тыка натыкать подходящие значения _xScale,_yScale (возможно, они будут одинаковые). При этом было бы неплохо, чтобы точка привязки мувика была бы не в "левом верхнем углу", а где-то в районе середины, ежели таковая ващще есть.... Согласен, что оба варианта корявые..... |
|
|||||
|
[+ 1.11 06.02.2006]
[+ 1.11 13.11.2005] |
Понимаешь, у меня таких карт 100 штук. Вот я и хочу написать такой скрипт, который бы делал показывал красные границы для каждой отдельной части карты при наведении на нее мышкой. А то вручную это делать очень не хочется....
|
|
|||||
|
Регистрация: Dec 2002
Адрес: Сочи
Сообщений: 2,819
|
Атачишь в центр мувика мувик/красн.круг с разм., допустим -3x3/. Потом пишешь функцию разлёта в рандомном направлении и остановкой на границе и альфой =100
/начальная альфа =0/.Запуск функции разлёта/в неё же можно засунуть и атач/ лучше сунуть в setInterval(), что бы не зависеть от fps. Через какое то время, граница сформируется. Вопрос,? через какое время? ![]() |
|
|||||
|
Регистрация: Dec 2002
Адрес: Сочи
Сообщений: 2,819
|
Что то типа такого
MovieClip.prototype.razlet = function(name) { this.xrand = 5*(Math.random()-.5); this.yrand = 5*(Math.random()-.5); this.onEnterFrame = function() { if (name.hitTest(this._x, this._y, true)) { this._x += this.xrand; this._y += this.yrand; } else { this._x += 0; this._y += 0; this._alpha = 100; delete this.onEnterFrame; } }; }; _root.nnn = 0; function granisa(name) { tx = name._x; ty = name._y; for (i=1; i<=100; i++) { this.attachMovie("krug", "krug"+i+_root.nnn, i+_root.nnn); this["krug"+i+_root.nnn]._x = tx; this["krug"+i+_root.nnn]._y = ty; this["krug"+i+_root.nnn]._alpha = 0; this["krug"+i+_root.nnn].razlet(name); } _root.nnn += 100; } setInterval(function () { granisa(_root.mc); }, 1000);//остановить, допустим через 5сек./ В общем тяжелый случай. ![]() |
|
|||||
|
похожее решение : нащупываем границу ( подойдет только для выпуклых фигур) и по ней рисуем тостую линию
MovieClip.prototype.getContur=function(n){ this.cx=new Array(n); this.cy=new Array(n); for(i=0;i<n;i++){ var x=y=0; while(this.hitTest(this._x+x,this._y+y,true)){ x+=Math.cos(i*2*Math.PI/n); y+=Math.sin(i*2*Math.PI/n); } this.cx[i]=x; this.cy[i]=y; } } MovieClip.prototype.drawContur=function(){ this.createEmptyMovieClip("cont",1); var l=this.cx.length; this.cont.lineStyle(10,0xFF0000); this.cont.moveTo(this.cx[l-1],this.cy[l-1]); for(i=0;i<l;i++) this.cont.lineTo(this.cx[i],this.cy[i]); } mc.getContur(64);// число точек контура : по вкусу mc.drawContur(); |
![]() |
Часовой пояс GMT +4, время: 00:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|