Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Мой visible для мувиков (мягкий) (http://www.flasher.ru/forum/showthread.php?t=83502)

szz 07.08.2006 06:07

Мой visible для мувиков (мягкий)
 
Решил написать свое свойство для мувиклипов, аналогиное _visible, но отличается тем, что позволяет менять видимость постепенно, используя альфу.
то есть по идее я могу менять видимость таким образом:
mc.$visible = true;
mc2.$visible=false;
и мувик будет затухать или появлятся постепенно, а не мгновенно как _visible.
Но вот загвоздка: для одного мувика это работает отлично, а для двух (как я написал выше) - почему-то работает все равно только у одного!!!
В чем моя ошибка, не пойму, я вроде все верно и продуманно делаю...
Вот код:
Код:

MovieClip.prototype._$sv_fade = function(){
        with(this){
                _$sv_onEnterFrame();
                _$sv_end_fade=false;
                _$sv_current_alpha += _$sv_visible_direction?_$sv_speed:-_$sv_speed;
                if(_$sv_visible_direction){
                        _$sv_end_fade = _$sv_current_alpha >= _$sv_target_alpha;
                }else{
                        _$sv_end_fade = _$sv_current_alpha <= _$sv_target_alpha;
                }
               
                if(_$sv_end_fade){
                        _visible = _$sv_visible_direction;
                        _$sv_current_alpha = _$sv_target_alpha;
                       
                        onEnterFrame = _$sv_onEnterFrame;
                        _$sv_onEnterFrame=null;       
                        _$sv_act=false;
                }
                _alpha = _$sv_current_alpha;
        }
}
MovieClip.prototype.set_visible_speed = function(s){ this._$sv_speed = a; }
MovieClip.prototype.set_visible = function(v){
  with(this){         
        trace('set visible ('+String(v)+') for '+_name);
          if(_$sv_speed==null)_$sv_speed = 5;
        if(_$actual_alpha==null)_$actual_alpha = _alpha;
        trace('  :'+_name+':  _$sv_act = '+String(_$sv_act));
        if(_$sv_act){
                _$sv_visible_direction = v;
                _$sv_target_alpha = v?_$actual_alpha:0;       
                return;
        }
        _$sv_act=true;
        _$sv_visible_direction = v;
        _visible = true;
        _$sv_current_alpha = v?0:_$actual_alpha;
        _$sv_target_alpha = v?_$actual_alpha:0;       
        _$sv_onEnterFrame = onEnterFrame;
        onEnterFrame = _$sv_fade;       
        trace('start from: '+_$sv_current_alpha+', to '+_$sv_target_alpha);
  }
}
MovieClip.prototype.get_visible = function(){return this._$sv_visible_direction;}
MovieClip.prototype.addProperty("$visible", MovieClip.prototype.get_visible, MovieClip.prototype.set_visible);


KUZEN 07.08.2006 10:36

Ну во первых visible и alpha это не одно и тоже, а во вторых зачем изобретать велосипед ...

Код:

import mx.transitions.*;
import mx.transitions.easing.*;
var tween = new Tween(my_mc, "_alpha", Regular.easeIn, 100, 0, 5, true);


szz 07.08.2006 14:13

Хорошо, и как это оформить в property мувика?

KUZEN 07.08.2006 17:07

Легко

Код:

import mx.transitions.*;
import mx.transitions.easing.*;
MovieClip.prototype.fade = function(_in, _out, _property, _speed) {
        var tween = new Tween(this, _property, Regular.easeIn, _in, _out, _speed, true);
};
//
my_mc.fade(100, 0, "_alpha", 3);


szz 08.08.2006 02:32

Спасибо!
Хорошо, а как мне отловить такое, когда вдруг во время tween, предположим, в невидимый, пользователь хочет сделать этот мувик видимым? Тогда оно бликнет? Это плохо, у меня например в коде это решается так, что посередине исчезновения мувик начинаеть двигаться в обратную сторону, и все мягко.
Могу ли я узнать текущее состояние _alpha в данном случае, т.е где именно твин сейчас между 0 и 100

KUZEN 08.08.2006 10:10

Всё можно

Код:

import mx.transitions.*;
import mx.transitions.easing.*;
MovieClip.prototype.fade = function(_in, _out, _property, _speed) {
        var tween = new Tween(this, _property, Regular.easeIn, _in, _out, _speed, true);
        tween.onMotionChanged = function() {
                trace(my_mc._alpha);
        };
};
//
my_mc.fade(100, 0, "_alpha", 3);


szz 13.08.2006 02:41

Что-то у меня не получается...
Я сделал простой примерчик, нарисовал там мувик mov и написал в первом фрейме:
Код:

import mx.transitions.*;
import mx.transitions.easing.*;
var tw = new Tween(_root.mov, "_x", Regular.easeIn, 0, 100, 1, true);

Он не сдвинулся!

szz 13.08.2006 02:43

А, простите, все работает )))

szz 13.08.2006 03:00

Почему у меня в flash 8 help нету инфы про Tween? (((
Где взять подробную доку?


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

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