Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Трансформация (http://www.flasher.ru/forum/showthread.php?t=56094)

Бодик 23.03.2004 11:20

Трансформация
 
У меня есть мувик сложной формы (карта).
Как програмно сделать так, что бы вокруг карты появилась ее граница красного цвета?

Cvazimodo 23.03.2004 11:27

Самый простой вариан - создать вручную мувик чуть большего размера, поместить туда аналогичную по форме карты фигуру красного цвета. Изначально установить _alpha = 0, а потом увеличить (плавно или нет) до 100.

Бодик 23.03.2004 11:36

Я так пробовал, но гарницы получаются неровными. Их толщина в одном месте больше, в одном меньше. Это из за того, что карта очень неправильной формы. Есть ли иной выход?

fmsmith 23.03.2004 15:17

Установи аттрибуты инструмента "линия" такими, как тебе нужно для окантовки.
Выдели свою неправильной формы карту и попробуй клацнуть на ней инструментом "чернильница". Появится обрисовка её контура линией.
Потом выдели только линию и сделай из неё мувиклип.
Положи его на карту и сделай ему _visible=false или _alpha=0.
Потом, когда надо, делаешь его видимым.

Бодик 23.03.2004 15:29

Спасибо, но как это сделать все прогамно. Ведь трогать мувик вручную нельзя

fmsmith 23.03.2004 16:30

Не совсем понимаю, что мешает трогать мувик (кроме отсутствия исходника :D ), но это не моё дело.....
Есть два варианта
1. Создать сверху пустой мувик и рисовать в нём огибающую при помощи moveTo() и curveTo(), что может служить разновидностью меры наказания и надоест раньше, чем получится....
2.Сделать копию мува-карты, расположить её под оригиналом, потм в ней посредством ColorTransform залить карту тем же красным.....
Ну а потом методом тыка натыкать подходящие значения
_xScale,_yScale (возможно, они будут одинаковые).
При этом было бы неплохо, чтобы точка привязки мувика была бы не в "левом верхнем углу", а где-то в районе середины, ежели таковая ващще есть....


Согласен, что оба варианта корявые.....

Бодик 23.03.2004 16:38

Понимаешь, у меня таких карт 100 штук. Вот я и хочу написать такой скрипт, который бы делал показывал красные границы для каждой отдельной части карты при наведении на нее мышкой. А то вручную это делать очень не хочется....

Штрек 23.03.2004 17:16

Атачишь в центр мувика мувик/красн.круг с разм., допустим -3x3/. Потом пишешь функцию разлёта в рандомном направлении и остановкой на границе и альфой =100
/начальная альфа =0/.Запуск функции разлёта/в неё же можно засунуть и атач/ лучше сунуть в setInterval(),
что бы не зависеть от fps. Через какое то время,
граница сформируется. Вопрос,? через какое время? :p

Штрек 23.03.2004 19:34

Что то типа такого

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сек./
В общем тяжелый случай. :p

silin 23.03.2004 23:00

похожее решение : нащупываем границу ( подойдет только для выпуклых фигур) и по ней рисуем тостую линию
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, время: 10:46.

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