Форум 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)
-   -   If внутри While - проблемы (http://www.flasher.ru/forum/showthread.php?t=136405)

ANTONIO1945 16.02.2010 16:39

If внутри While - проблемы
 
Здравствуйте, уважаемые форумчане!
Только начинаю осваивать AS1, и появились проблемы. Мне необходимо создать программу, перекрашивающую n-ое кол-во мувиков (с именами muvik1, muvik2,.., muvikN) в 2 цвета, в зависимости от подгружаемых из текстового файла значений переменных A1, A2,..,An. Содержимое текстового файла загружено в _level0. Если переменная AN принимает значение = 100, то muvikN перекрашивается в красный, AN=50 - muvikN желтый
Код AS1/AS2:

var KOLVO = 10;
 
i = 1;
while (i < KOLVO + 1)
{
        eval("muvik" + i)._alpha = 0;
 
        if (eval("_level0.A" + i) == 100)
    {
        COLORR = new Color(eval("muvik" + i)._name);
        COLORR.setRGB(0xE74912);
        eval("muvik" + i)._alpha = 36;
    }
    else
    {
        if (eval("_level0.A" + i) == 50)
        {
            COLORR2 = new Color(eval("muvik" + i)._name);
            COLORR2.setRGB(0xdadC00);
            eval("muvik" + i)._alpha = 41;
        }
    };
 
    ++i;
}

Но ничего не происходит
Если задать оба условия if явно ( например, if(2<3)), то Флэшка работает,
Если вытащить один из блоков, начинающихся с COLORR за пределы if - опять же все работает. Но мне необходим цикл, для обработки произвольного кол-ва мувиков.


Внутри того же цикла while находится такой код, который функционирует исправно:
Код AS1/AS2:

eval("muvik" + i).onRelease = function ()
    {
        z = Number(substring(String(this._name), 2, 3));
        if (eval("_level0.A" + z) == 100)
        {
            getURL("http://bla-bla.html", "_self");
        }
    }
    ;


samana 16.02.2010 17:46

Я что то слышал о _level0.onData=function(){}....., это проверка загрузились ли все переменные. Может твой код срабатывает раньше чем они загрузились.

ANTONIO1945 16.02.2010 18:20

Спасибо, друг, но не сработало =(

point111 16.02.2010 19:40

а ты трейсы внутри ифов ставил? ты туда вообще заходишь?
может ты сравниваешь не однотипные данные?

"_level0.A" + i - не текстовое ли значение имеет?

ANTONIO1945 16.02.2010 21:32

Данные однотипные (числовые) "_level0.A" + i" это A1=100, A2=100, A3 = 50, ..., AN = 100
Я даже пытался изначально присваивать значение "_level0.A" + i" переменной, а в if'е оперировать этой переменной. При этом я задавал различные типы переменной var myVar:Number, var myVar:Number:text, myVar Number:String...

Можно поподробнее про "трейсы"? Насколько я знаю trace необходимы для тестирования кода. Буду рад любой зацепке.

P.S. Еще интересно зачем в (работающей) функции eval("muvik" + i).onRelease = function () переменная z, которая по сути равна i, но если заменить z на i функция перестает работать...

point111 17.02.2010 11:43

trace ("tralala 1"); - просто выведет в оутпут надпись "tralala 1"

т.е. внутри IF поставь
trace ("tralala " +i );
- если надпись появится, значит ты зашел в IF, если нет, значит условие не срабатывает
Так же, можно поставить трейсы перед ифами, чтобы посмотреть чему же действительно равна "_level0.A" + i
trace (_level0.A + i);

________
эээ... стоп,
а чего это ты в ифе сравниваешь какую-то "_level0.A" + i с чем-то?
получается, ты сравниваешь if ("_level0.A0" == 100) - "_level0.A0" здесь текстовое значение, это условие всегда ложно

ANTONIO1945 17.02.2010 12:12

Спасибо большое за наводку - попробую.

Цитата:

"_level0.A0" здесь текстовое значение, это условие всегда ложно
Перед "_level0.A0" установлен eval, он-то походу и должен преобразовывать эту строку в значение 100

Выяснилось, что если заключить блок if в функцию мувика muvik, запускающуюся по какому-нибудь событию - все работает!
Напр.:
eval("muvik"+i).onRollOver = function() {if...}
Проблема в том, что мувик должен менять цвет сразу же, без вмешательства пользователя

Может подскажете како-либо подходящее событие?

dimarik 17.02.2010 12:16

Код AS1/AS2:

new Color(eval("muvik" + i)._name);

заменить на

Код AS1/AS2:

new Color( eval("muvik" + i) );

или
Код AS1/AS2:

new Color( this["muvik" + i] );

Второй вариант современнее.

ANTONIO1945 17.02.2010 13:12

dimarik, спаибо, но проблема точно не в блоках начинающихся с Color, т.к. если вытащить их за пределы if - они работают. Твой вариант, кстати тоже работает, но
trace(eval("muvik" + i)._name)) -- возвращает название мувика "muvik1"
trace(this["muvik" + i]) -- возвращает "_level0.instance1.muvik1"

point111, трассировка if показала, что в if программа вообще не заходит!

udaaff 17.02.2010 13:19

Проще было бы взглянуть на рабочий пример, чем сидеть и гадать, что вы там намудрили.


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

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