Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.02.2010, 16:39
ANTONIO1945 вне форума Посмотреть профиль Отправить личное сообщение для ANTONIO1945 Найти все сообщения от ANTONIO1945
  № 1  
Ответить с цитированием
ANTONIO1945

Регистрация: Feb 2010
Сообщений: 12
По умолчанию 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");
        }
    }
    ;

Старый 16.02.2010, 17:46
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Я что то слышал о _level0.onData=function(){}....., это проверка загрузились ли все переменные. Может твой код срабатывает раньше чем они загрузились.

Старый 16.02.2010, 18:20
ANTONIO1945 вне форума Посмотреть профиль Отправить личное сообщение для ANTONIO1945 Найти все сообщения от ANTONIO1945
  № 3  
Ответить с цитированием
ANTONIO1945

Регистрация: Feb 2010
Сообщений: 12
Спасибо, друг, но не сработало =(

Старый 16.02.2010, 19:40
point111 вне форума Посмотреть профиль Отправить личное сообщение для point111 Найти все сообщения от point111
  № 4  
Ответить с цитированием
point111
[+1 15.06.10]
 
Аватар для point111

Регистрация: Feb 2009
Сообщений: 56
а ты трейсы внутри ифов ставил? ты туда вообще заходишь?
может ты сравниваешь не однотипные данные?

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

Старый 16.02.2010, 21:32
ANTONIO1945 вне форума Посмотреть профиль Отправить личное сообщение для ANTONIO1945 Найти все сообщения от ANTONIO1945
  № 5  
Ответить с цитированием
ANTONIO1945

Регистрация: Feb 2010
Сообщений: 12
Данные однотипные (числовые) "_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 функция перестает работать...


Последний раз редактировалось ANTONIO1945; 16.02.2010 в 21:40.
Старый 17.02.2010, 11:43
point111 вне форума Посмотреть профиль Отправить личное сообщение для point111 Найти все сообщения от point111
  № 6  
Ответить с цитированием
point111
[+1 15.06.10]
 
Аватар для point111

Регистрация: Feb 2009
Сообщений: 56
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" здесь текстовое значение, это условие всегда ложно


Последний раз редактировалось point111; 17.02.2010 в 11:53.
Старый 17.02.2010, 12:12
ANTONIO1945 вне форума Посмотреть профиль Отправить личное сообщение для ANTONIO1945 Найти все сообщения от ANTONIO1945
  № 7  
Ответить с цитированием
ANTONIO1945

Регистрация: Feb 2010
Сообщений: 12
Спасибо большое за наводку - попробую.

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

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

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

Старый 17.02.2010, 12:16
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS1/AS2:
new Color(eval("muvik" + i)._name);
заменить на

Код AS1/AS2:
new Color( eval("muvik" + i) );
или
Код AS1/AS2:
new Color( this["muvik" + i] );
Второй вариант современнее.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.02.2010, 13:12
ANTONIO1945 вне форума Посмотреть профиль Отправить личное сообщение для ANTONIO1945 Найти все сообщения от ANTONIO1945
  № 9  
Ответить с цитированием
ANTONIO1945

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

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


Последний раз редактировалось ANTONIO1945; 17.02.2010 в 13:19.
Старый 17.02.2010, 13:19
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 10  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Проще было бы взглянуть на рабочий пример, чем сидеть и гадать, что вы там намудрили.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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