Форум 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)
-   -   цикл for и область видимости его переменной (http://www.flasher.ru/forum/showthread.php?t=117855)

axiom 08.11.2008 16:52

цикл for и область видимости его переменной
 
Hi all,скажите какая область видимости переменной цикла?В теле цикла трейсю выводит:1,2,3.А за ним только 4???

laurisgutmanis 08.11.2008 17:10

не понятен вопрос.

Можно пример кода?

axiom 08.11.2008 17:20

хех.
Код:

for(var i=1;i<=3;i++){};
trace(i);


etc 08.11.2008 17:26

И что вас смущает? Цикл отсчитал i до 4, всё правильно.

axiom 08.11.2008 17:26

как получить вне цикла 1,2,3

etc 08.11.2008 17:27

Цитата:

Сообщение от axiom (Сообщение 775529)
как получить вне цикла 1,2,3

Присвоить какому-нибудь i-ому объекту i-ый номер в теле цикла.

laurisgutmanis 08.11.2008 17:28

И?
Все работает.
Код:

for(i=1;i<=3;i++){
trace(i);
};

Как и должно выводить 1, 2, 3.
А что вы хотите?

axiom 08.11.2008 17:30

Код:

for (var i = 1; i<=3; i++) {
        this["btn"+i].onRelease = function() {
                var txt:LoadVars = new LoadVars();
                txt.onLoad = function() {
                        out_txt.text = txt.txt;
                };
                txt.load(i+".txt");
        };
}

Добавлено через 55 секунд
номер кнопки - номер текста???

laurisgutmanis 08.11.2008 17:34

Может так удобнее будет?:
Код:

for (var i = 1; i<=3; i++) {
this["btn"+i].visible= true;
this["btn"+i].enabled = true;
}

btn1.onRelease = function() {
        var txt:LoadVars = new LoadVars();
        txt.onLoad = function() {
                out_txt.text = txt.txt;
        };
                txt.load(i+".txt");
};

btn2.onRelease = function() {
...
}
btn3.onRelease = function() {
...
}


etc 08.11.2008 17:37

Боже мой, стандартная ошибка начинающего программиста. Как-то так, в общем:

Код:

var txt = new LoadVars();
txt.onLoad = function(success) {
        out_txt.text = this.txt;
}
function release() {
        txt.load(this.j + '.txt');
}
for (var i = 0; i<3; i++) {
        var btn = this['btn' + i];
        btn.j = i + 1;
        btn.onRelease = release;
}
delete btn;
delete i;
delete j;


axiom 08.11.2008 17:39

ну к каждой кнопочке код писать громоздко если кнопок до фига

Добавлено через 2 минуты
etc__.попытаюсь разобраться,Скажи в чём у меня ошибка?

etc 08.11.2008 17:44

В том, что вы почему-то думаете, что значение итератора в цикле каким-то чудесным образом замораживается, даже после выхода из цикла.

laurisgutmanis 08.11.2008 17:45

Цитата:

Сообщение от axiom (Сообщение 775539)
ну к каждой кнопочке код писать громоздко если кнопок до фига


Используй Mouse.addListener и hitTest - для работы со многих кнопок

axiom 08.11.2008 17:45

чёт я совсем запутался,__etc как у тебя btn.j = i+1?Что это?

Добавлено через 2 минуты
всё ладно!Я понял мне на форуме делать нечего чёт я многого не понимаю,буду сам на своих ошибках учиться,простите что понапрасну сотресаю воздух

etc 08.11.2008 17:50

laurisgutmanis, вам пора книжку «Вредные советы по ActionScript» выпускать.

axiom, i+1 только лишь потому что у вас текстовики с 1 начинаются, а не с 0. И кнопки я забыл с 1 считать.

axiom 08.11.2008 17:55

Всё равно j = undefined

laurisgutmanis 08.11.2008 18:00

Цитата:

Сообщение от __etc (Сообщение 775549)
laurisgutmanis, вам пора книжку «Вредные советы по ActionScript» выпускать.

Все. Молчу, молчу...

etc 08.11.2008 18:06

Цитата:

Сообщение от axiom (Сообщение 775551)
Всё равно j = undefined

Значит разберитесь в коде, поймите, как он должен работать и исправьте.
Он написан на коленке, не проверялся совершенно.

axiom 08.11.2008 18:50

Цитата:

Сообщение от __etc (Сообщение 775542)
В том, что вы почему-то думаете, что значение итератора в цикле каким-то чудесным образом замораживается, даже после выхода из цикла.

Поясните пожалуйста используя примитив
Код:

for(var i =1;i<=3;i++){
trace(i);//внутри цикла
};
trace(i)//снаружи

что где размораживаеться???:umnik2:

etc 08.11.2008 18:55

Трейс внутри цикла выполняется непосредственно при итерации, а вызовы загрузок ваших файлов по клику пользователем — гораздо позже, уже после выполенения цикла, когда итератор достигнет окончательного значения. Почему вы думали, что значение итератора останется тем же, которое было в момент присвоения onRelease — непонятно.

axiom 08.11.2008 18:59

Код:

for (var i = 1; i<=3; i++) {
        this["btn"+i].onRelease = function() {
                var txt:LoadVars = new LoadVars();
                txt.onLoad = function() {
                        out_txt.text = this.txt;
                };
                txt.load(i+".txt");
        };
}

ну это так чтоб наглядно было

Добавлено через 1 минуту
значение итератора ведь везде одинаковым должно быть

Добавлено через 2 минуты
что для кнопки что для загружаемого текста

Добавлено через 3 минуты
что для кнопки что для загружаемого текста

etc 08.11.2008 19:10

Вы ничего не поняли, перечитайте мой пост ещё раз.

И оформляйте свою мысль одним постом, пожайлуста, а не по кусочку поминутно.

axiom 08.11.2008 19:12

Цитата:

Сообщение от __etc (Сообщение 775538)
Боже мой, стандартная ошибка начинающего программиста. Как-то так, в общем:

Код:

var txt = new LoadVars();
txt.onLoad = function(success) {
        out_txt.text = this.txt;
}
function release() {
        txt.load(this.j + '.txt');
}
for (var i = 0; i<3; i++) {
        var btn = this['btn' + i];
        btn.j = i + 1;
        btn.onRelease = release;
}
delete btn;
delete i;
delete j;


Если твой пример наглядней обращайся к ниму хотя он ни чем не отличаеться от моего

etc 08.11.2008 19:19

Отличается.

Конкретно в вашем случае будет:

Код:

var txt = new LoadVars();
txt.onLoad = function(success) {
        out_txt.text = this.txt;
}
function release() {
        trace(this.j);
        txt.load(this.j + '.txt');
}
for (var i = 0; i<3; i++) {
        var btn = this['btn' + (i + 1)];
        btn.j = i + 1;
        btn.onRelease = release;
}
delete btn;
delete i;

Но раз вы не поняли, чем отличается, тогда на этом я заканчиваю дискуссию.

axiom 08.11.2008 19:26

я тож так думаю,я сам разберусь так лучше будет пусть и займёт уйму времени

laurisgutmanis 08.11.2008 19:30

Цитата:

Сообщение от axiom (Сообщение 775590)
Если твой пример наглядней обращайся к ниму хотя он ни чем не отличаеться от моего

Объясни задачу-цель, что ты хочешь добиться?
Что имеешь?

Тут ведь не форум экстрасенсов, и телепатов нет.

На твой 1 вопрос можно ответить в кратце: в цикле ты каждый раз меняешь значение переменной i, по оканчании цикла: i = последнему значению, в твоем случае 3.

axiom 08.11.2008 19:38

Да ладно,не бог весть проблема какая разберусь спасибо всем огромное!Как тему удалить?

etc 08.11.2008 19:50

Тему удалить нельзя, это форум.

axiom 08.11.2008 19:51

А на серваке они чего не файлами храняться?

etc 08.11.2008 19:57

Этот вопрос выходит за рамки темы.
Темы не удаляются, потому что представляют собой информационную ценность. Точка.
Дальнейшие посты не по теме будут удаляться.

axiom 08.11.2008 20:04

Спасибо за код он работает,вот только переменные удалять зачем?

etc 08.11.2008 20:09

Мусор потому что.

Grivis 20.11.2008 01:25

Доброй ночи. Не получается такой же код. Посмотрите что не так, плиз:
Код AS1/AS2:

for (var j=0; j<20; j++) {
        var field = this['mc'+j];
        var tex = this['u'+j];
        field.tex.text = ". "+description[j];
        }

В итоге должен получиться ряд типа:
Код AS1/AS2:

mc0.u0.text= ". "+description[0]
mc1.u1.text= ". "+description[1]

Но что-то не выходит=(((

BBOY Ильич 20.11.2008 02:13

Код AS1/AS2:

for (var j=0; j<20; j++) {
        this['mc'+j]['u'+j].text = ". "+description[j];
        }

или
Код AS1/AS2:

for (var j=0; j<20; j++) {
        var field = this['mc'+j];
        var tex = this.field['u'+j];
        field.tex.text = ". "+description[j];
        }


Grivis 20.11.2008 10:27

Вложений: 1
Спасибо! Заработало, если заменить this на _root:
Код AS1/AS2:

for (var j=0; j<20; j++) {
        _root['mc'+j]['u'+j].text = ". "+description[j];
        picture.loadMovie(thumbnails[j], 1);
        }

Вот только картинку не грузит - пишет ошибка загрузки URL, хотя если просто поставить цифру вместо j, то работает. Почему?

Если кто имеет возможность/желание помочь, прикрепил исходник в аттачменте

BBOY Ильич 20.11.2008 15:55

Добавь строку:

Код AS1/AS2:

_root['mc'+i].i = i;

и отредактируй эти:
Код AS1/AS2:

getURL(link[this.i], "_parent");
loadMovie(thumbnails[this.i], picture);


Grivis 20.11.2008 16:28

Cпасибо, братан, все понял.


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

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