Просмотр полной версии : Трансформация
У меня есть мувик сложной формы (карта).
Как програмно сделать так, что бы вокруг карты появилась ее граница красного цвета?
Cvazimodo
23.03.2004, 11:27
Самый простой вариан - создать вручную мувик чуть большего размера, поместить туда аналогичную по форме карты фигуру красного цвета. Изначально установить _alpha = 0, а потом увеличить (плавно или нет) до 100.
Я так пробовал, но гарницы получаются неровными. Их толщина в одном месте больше, в одном меньше. Это из за того, что карта очень неправильной формы. Есть ли иной выход?
Установи аттрибуты инструмента "линия" такими, как тебе нужно для окантовки.
Выдели свою неправильной формы карту и попробуй клацнуть на ней инструментом "чернильница". Появится обрисовка её контура линией.
Потом выдели только линию и сделай из неё мувиклип.
Положи его на карту и сделай ему _visible=false или _alpha=0.
Потом, когда надо, делаешь его видимым.
Спасибо, но как это сделать все прогамно. Ведь трогать мувик вручную нельзя
Не совсем понимаю, что мешает трогать мувик (кроме отсутствия исходника :D ), но это не моё дело.....
Есть два варианта
1. Создать сверху пустой мувик и рисовать в нём огибающую при помощи moveTo() и curveTo(), что может служить разновидностью меры наказания и надоест раньше, чем получится....
2.Сделать копию мува-карты, расположить её под оригиналом, потм в ней посредством ColorTransform залить карту тем же красным.....
Ну а потом методом тыка натыкать подходящие значения
_xScale,_yScale (возможно, они будут одинаковые).
При этом было бы неплохо, чтобы точка привязки мувика была бы не в "левом верхнем углу", а где-то в районе середины, ежели таковая ващще есть....
Согласен, что оба варианта корявые.....
Понимаешь, у меня таких карт 100 штук. Вот я и хочу написать такой скрипт, который бы делал показывал красные границы для каждой отдельной части карты при наведении на нее мышкой. А то вручную это делать очень не хочется....
Атачишь в центр мувика мувик/красн.круг с разм., допустим -3x3/. Потом пишешь функцию разлёта в рандомном направлении и остановкой на границе и альфой =100
/начальная альфа =0/.Запуск функции разлёта/в неё же можно засунуть и атач/ лучше сунуть в setInterval(),
что бы не зависеть от fps. Через какое то время,
граница сформируется. Вопрос,? через какое время? :p
Что то типа такого
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
похожее решение : нащупываем границу ( подойдет только для выпуклых фигур) и по ней рисуем тостую линию
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();
вобщем рисуй вручную)))) ети коды тебе непомогут)))) несовершенны да и молость неуниверсальны ( так ты говориш у тебя етих карт 100 шт))))
купи ящик холодненького и лутше всеже нарисуй )
нето со скриптом долга промучаешся. пока подобьеш )))
похоже на придедущие но проще
greyshaman
24.03.2004, 02:00
эээ 9000 ms некрутоватоли.
можно пойти в таком направлении.
ls=[2,0xff0000];
for(i=0;i<6;i++){
var clip =map.duplicateMovieClip("d"+i,7777+i,
{
_x: (map._x+ls[0]*Math.cos(i*Math.PI/3)),
_y: (map._y+ls[0]*Math.sin(i*Math.PI/3))
});
myColor = new Color(clip);
myColor.setRGB(ls[1]);
}
map.swapDepths(8888);
Оригинал написал(а) greyshaman
эээ 9000 ms некрутоватоли.
ну извини :)
Спасибо greyshaman! Это то что надо!!!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.