Форум 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=87497)

sa old 06.11.2006 21:11

загадочный флеш, или что такое с _alpha?
 
Здравствуйте! Может, просто я глупая и не понимаю элементарных вещей.

Интересная проблема для меня: вот, пишу в руте для мувиклипов TOR:
Код:

TOR.onPress = function() {
        contt = "";
        conth.unloadMovie();
        contv.unloadMovie();
        if (this.num<10) {
                III = "00";
        } else {
                III = "0";
        }
        if (this.pos == "h") {
                v.gotoAndStop(1);
                h.gotoAndPlay(2);
                conth._alpha = 0;
                conth.loadMovie("FullSize/"+III+this.num+".jpg", 1);
                this.onEnterFrame = function() {
                        if (conth._alpha<100 && ja == true) {
                                conth._alpha += 4;
                                trace(conth._alpha);
                        }
                        trace(ja);
                };
        } else {
                h.gotoAndStop(1);
                v.gotoAndPlay(2);
                contv._alpha = 0;
                contv.loadMovie("FullSize/"+III+this.num+".jpg", 1);
                this.onEnterFrame = function() {
                        if (contv._alpha<100 && ja == true) {
                                contv._alpha += 4;
                                trace(conth._alpha);
                        }
                        trace(ja);
                };
        }
};

на сцене 3 контейнера contt, conth, contv для текста, горизонтальных и вертикальных картинок соотвественно. Параметр ja = true означает, что какой-либо мувиклип, отвечающий за подложку под картинки, полностью проигрался и можно что-либо грузить в соотвествующий контейнер (если мувиклип не проигрался, то он передает _parent.ja = false). Вроде бы все правильно, верно? А теперь смотрим трейс:

Цитата:

false
...
false
3.90625
true
7.8125
true
...
62.5
true
66.40625
true
true
true
...
иногда он конечно доходит до 101.5625, так как условие все-таки нужно выполнять. А иногда и вовсе пишет: ja равен false всегда.

Итак, вот вопросы: почему величина прироста cont._alpha += 4; не целое число, как я прошу, а какая-то близкая 3.90625? Почему, если даже проигрался мувиклип с подложкой (там это видно), иногда не передается в рут значение ja = true? Почему cont._alpha иногда не доходит до 100, и застревает где-то на полпути?

Флеш — ужасно загадочная и странная штука 8).

motor4ik 06.11.2006 22:03

да, глюки бывают, но всеже ничего загадочного, как много раз тут меня убеждали это не во флэше дело а в ручках ))) с альфа сто раз обсуждалось это так надо не пугайтесь ))) во вторых нужно убивать onEnterFrame, из за этого могут быть глюки полюбе))) а в остальном , это ваша программа, и трудно сказать что она там должна делать а что не должна )))

aksios 06.11.2006 22:26

Может я что не догоняю, но вам не кажеться странным, в теле функции onPress на if объявлять еще одну функцию onEnterFrame, по моему ее там можно на худой конец вызвать, а объявлять то каждый раз при выполнении if зачем?

sa old 06.11.2006 22:33

Вот вот! Я понимаю все коварство onEnterFrame, и просила подсказать альтернативу, так как знаний явно недостаточно. Вот и пост. Но пока пытаюсь вообще избавиться от onEnterFrame. И может ли он влиять на то, что значение ja не передается в рут?

aksios 06.11.2006 22:51

Я бы предложил примерно такой сценарий:
На onEnterFrame служебная переменная принимает значение true.
Далее, в анимации в удобоваримом месте - когда анимация подложки завершена, идет проверка этого факта, контейнер приобретает _alpha=0 и начинается загрузка контекста. При выполнении условия загрузка завершена, через setInterval меняется альфа контейнера.

miramax 06.11.2006 23:13

Всё верно, альфа канал имеет 256 уровней ( как и любой другой канал RGB записываемый одним битом). Но для удобства альфа канал был выведен в отделное свойство, которое позволяет нам работать с процентами. На самом деле ставя значение _alpha = 50% мы имеем дело с альфа каналом равным (100-50)/100*256 = 128.
Так же переводится любое число , которое мы присваеваем альфа каналу.
Реальный "шаг" альфы есть 100/256 = 0,390625. И если мы присваеваем альфе число не кратное 0,390625, то альфа принимает значение наиболее близкого кратного числа. К примеру 40 не кратно 0,390625. Но наиболее близкое число 39,84375. Поэтому код
Код:

_alpha = 40;
trace(_alpha) // 39.84375

выведет
39.84375.
К тому же проценты нужны для нахождения значения альфа канала во вложенных мувиках. Ну когда сам клип имеет альфу 50%, и ещё его дочерний клип имеет 50%, тогда суммарная альфа дочернего клипа будет 25%

Dendroid 07.11.2006 02:36

Поэтому лучше делать:
mc.my_alpha += 4; mc._alpha = mc.my_alpha;
Про "коварство onEnterFrame" - позабавило :) Ну, можно делать по окончании this.onEnterFrame = null;


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

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