Форум 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)
-   -   Проблема с "появлением", при увеличивании _alpha (http://www.flasher.ru/forum/showthread.php?t=123061)

sereg 24.03.2009 01:21

Проблема с "появлением", при увеличивании _alpha
 
Вложений: 1
Гружу данные из xml и по ним строю график. Пытаюсь сделать "появление" используя альфа канал. Проблема в том, что строиться только последний столбец, остальные почему-то игнорируются.
Подскажите плз в чем проблема
Код AS1/AS2:

my_xml = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(ok) {
if (ok) {
len = my_xml.childNodes[0].childNodes.length;
F_createAlphaGraphic();
}
};
my_xml.load("data1.xml");
 
F_createAlphaGraphic = function(){
 
for (var i = 0; i<len; i++) {
_root.createEmptyMovieClip("gr"+i, i);
var gr = _root["gr"+i];
gr._alpha=0;
gr._x = i*20+35;
var col = my_xml.childNodes[0].childNodes[i].attributes.value;
var Y:Number=360;
gr.onAlpha = function(){
if(gr._alpha<50){
gr.beginFill(0xBB62E1, gr._alpha/2);
gr.lineStyle(2, 0xBB62E1, gr._alpha+50);
gr.moveTo(gr._x, Y-col/4);
gr.lineTo(gr._x, Y);
gr.lineTo(gr._x+30, Y);
gr.lineTo(gr._x+30, Y-col/4);
gr.endFill();
gr._alpha+=0.5;
}
}
setInterval(gr.onAlpha,100);
}
};


Alkaz 24.03.2009 07:21

1. если вы делаете "появление" с использованием альфы, то зачем тогда каждый раз перерисовывать графику? я имею ввиду что beginFill стоит внутри таймера.
2. переменная gr у вас меняется при пробеге цикла, последним ее значением будет _root["gr"+(len-1)] - по таймеру вы меняете прозрачность у переменной gr, соответственно только у последнего мувика ссылку на который мы ей присвоили. вот так примерно:
Код AS1/AS2:

var Y:Number=360;
gr.beginFill(0xBB62E1, gr._alpha/2);
gr.lineStyle(2, 0xBB62E1, gr._alpha+50);
gr.moveTo(gr._x, Y-col/4);
gr.lineTo(gr._x, Y);
gr.lineTo(gr._x+30, Y);
gr.lineTo(gr._x+30, Y-col/4);
gr.endFill();
gr.onAlpha = function(){
        if(this._alpha<50){
                this._alpha+=11;
        }
}
setInterval(gr, "onAlpha", 100);

будет работать. но это все лучше все равно переписать :)
3. не забывайте сохранить свои таймеры чтобы потом их подчищать когда они больше не нужны:
Код AS1/AS2:

gr.onAlpha = function(){
        if(this._alpha<50){
                this._alpha+=11;
        }
        else
        {
                clearInterval(this.timer);
        }
}
gr.timer = setInterval(gr, "onAlpha", 100);

4. я бы вообще наверное использовал один таймер в руте с пробегом по циклу и вызовом метода onAlpha у каждого мувика. по крайней мере проще контроллировать таймер.
5. я бы советовал отказаться от использования вложенных функций.

sereg 24.03.2009 09:26

Мега спасибо!!))


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

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