Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > Появляющася и исчезающая линия


Автор: Caramel 11.7.2005, 10:24
Как такой эффект делается?

http://www.inam.az/kosmetologiya.html

Маской?
Или по траектории пускаются два клипа - один отрисовывает, другой стирает?

Автор: AlDev 11.7.2005, 10:52
хмм... я маленько не понял, про какой именно эффект ты говоришь....
но вообще можно сделать нечто подобное через attachMovie и всё, что приаттачено меняет свою яркость вниз, а клип пускается по траектории... получаем шлейф за клипом.

Автор: Caramel 11.7.2005, 11:47
Ну вот посмотри на сайте. Там бегут полоски вдоль контура.

Цитата(Alex @ 11.7.2005, 11:52)
нечто подобное через attachMovie и всё

А как? smile

Автор: AlDev 12.7.2005, 03:02
вот вариант "пускания" клипа по траетории:
хмм... со сглаженой траекторией делать если честно влом... а вот с обычной можно:
Код

/**
 * @author Alex S Batsuev
 */
class com.batsuev.tweens.line_traectory_tween
{
    public var target_mc:MovieClip;
    public var key_dots:Array;
    public var speed:Number;
    
    private var tween_interval:Number;
    private var current_dot_index:Number;
    
    private var current_x_pos:Number;
    private var current_y_pos:Number;
    
    private var listener_object:Object;
    //---------------------------------
    //-- class cosntructor
    public function line_traectory_tween(target_mc:MovieClip)
    {
        this.target_mc = target_mc;
    }
    //----------------------------------
    //-- add listener
    public function addListener(list:Object):Void
    {
        this.listener_object = list;
    }
    //-- strat tween
    public function start():Void
    {
        this.check_errors();
        this.current_dot_index = new Number();
        this.current_x_pos = this.key_dots[0].x;
        this.current_y_pos = this.key_dots[0].y;
        this.tween_interval = setInterval(this.step,1,this);
    }
    //----------------------------------
    //-- tween step function
    private function step(ths:Object):Void
    {
        var d:Number;
        d = Math.pow(ths.key_dots[ths.current_dot_index+1].x - ths.key_dots[ths.current_dot_index].x,2);
        d += Math.pow(ths.key_dots[ths.current_dot_index+1].x - ths.key_dots[ths.current_dot_index].x,2);
        d = Math.sqrt(d);
        var cos_a:Number = (ths.key_dots[ths.current_dot_index+1].x - ths.key_dots[ths.current_dot_index].x)/d;
        var sin_a:Number = (ths.key_dots[ths.current_dot_index+1].y - ths.key_dots[ths.current_dot_index].y)/d;
        var tan_a:Number = sin_a/cos_a;
        var dx:Number = ths.speed*cos_a;        
        var dy:Number = ths.speed*sin_a;
        ths.current_x_pos += dx;
        ths.current_y_pos += dy;
        ths.target_mc._rotation = Math.atan(tan_a)*180/Math.PI;
        if ((Math.abs(ths.current_x_pos - ths.key_dots[ths.current_dot_index+1].x)<Math.abs(dx))||(Math.abs(ths.current_y_pos - ths.key_dots[ths.current_dot_index+1].y)<Math.abs(dy)))
        {
            ths.current_dot_index++;
            if (ths.current_dot_index<(ths.key_dots.length-1))
            {
                ths.current_x_pos = ths.key_dots[ths.current_dot_index].x;
                ths.current_y_pos = ths.key_dots[ths.current_dot_index].y;            
            }else
            {
                ths.listener_object.onTweenFinish(ths.target_mc);
                clearInterval(ths.tween_interval);
            }
        }
        ths.target_mc._x = ths.current_x_pos;
        ths.target_mc._y = ths.current_y_pos;
    }
    //----------------------------------
    //-- check errors
    private function check_errors():Void
    {
        var errors_enabled:Boolean = false;
        var error_var:String = new String();
        if (this.target_mc==undefined)
        {
            errors_enabled = true;
            error_var = 'target_mc';
        }
        if (this.key_dots==undefined)
        {
            errors_enabled = true;
            error_var = 'key_dots';
        }
        if (this.speed==undefined)
        {
            errors_enabled = true;
            error_var = 'speed';
        }
        if (errors_enabled)
        {
            throw new Error("Param "+error_var+" must be specified");
        }
    }
}


использование:
Код

import com.batsuev.tweens.line_traectory_tween

var tween_mc:MovieClip = this.createEmptyMovieClip('tweenMovie',this.getNextHighestDepth());
tween_mc.lineStyle(1,0);
tween_mc.moveTo(0,0);
tween_mc.lineTo(20,0);
//----------------------
var list:Object = new Object();
list.onTweenFinish = function(target:Object)
{
    target._alpha = 0;
}
//----------------------
var dots:Array = new Array();
dots[0] = {x:0,y:0};
dots[1] = {x:10,y:60};
dots[2] = {x:80,y:30};
dots[3] = {x:30,y:160};
dots[4] = {x:550,y:400};
var twn = new line_traectory_tween(tween_mc);
twn.key_dots = dots;
twn.speed = 1;
twn.addListener(list);
twn.start();
stop();


если надо, могу выложить и модифицированый вариант с исчезающим шлейфом

Автор: PROCESSOR 12.7.2005, 03:21
Ну блин стока изврата ради эффектика. Хотя прикольный эффект.

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

Автор: AlDev 12.7.2005, 06:11
Цитата(PROCESSOR @ 12.7.2005, 08:21)
Ну блин стока изврата ради эффектика. Хотя прикольный эффект.


не вижу тут никакого изврата

Автор: PROCESSOR 13.7.2005, 04:51
оффтоп:

Неужели все профы пишут это так ? Т.е. мне вскоре придется заниматься этим же .... А почему ?
Меньше места берет написать это на AS чем нарисовать ? В чём плюсы ?

Автор: AlDev 13.7.2005, 04:57
есть flash-кодеры, а есть flash-программисты. Они и под разными среами достаточно часто работают.
например кодеры - под mtasc-ом. И там чистый кодинг, и больше ничего.
как писать - дело вкуса. Я например всегда всё пихаю в код и не задумываюся, как всё это просто во flash-ке сделать с помощью там какого-ндь встроеного tween-а и прочее... imho гораздо удобнее написать класс, который будет универсально делать всё подобное...
Цитата(PROCESSOR @ 13.7.2005, 09:51)
Неужели все профы пишут это так ?

ну кодеры обычно всё делают в коде. Дело вкуса.
к профам я себя не отношу )

Автор: Caramel 13.7.2005, 12:42
Саш, спасибо за код. Пока руки не доходят попробовать, но обязательно на днях)))


Цитата(Alex @ 13.7.2005, 05:57)
есть flash-кодеры, а есть flash-программисты

Т.е. флеш - это по сути своей написание программы? smile

Автор: AlDev 13.7.2005, 12:52
очепятка )))
есть flash-кодеры и flash-диpайнеры

Автор: ProgrammerBOTANIK 16.7.2005, 03:30
а flash-диpайнеры - это кто?
smile smile smile smile smile

Автор: AlDev 16.7.2005, 03:33
меня прёт smile smile smile
Flash-дизайнеры всмысле

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)