Форум 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)
-   -   Именование переменных (http://www.flasher.ru/forum/showthread.php?t=89376)

Cepreu4 14.12.2006 07:40

Именование переменных
 
Всем здрассе ещё раз... на предыдущую тему забил, думаю на Delphi напишу прогу с доступом к ftp... ну да сейчас не об этом...

У меня тут же назрел новый вопрос, думаю не сложный. Вообщем в прилагаемом коде всё написано в комментах
P.S. Вы уж извините за кривость кода, в Action Script начал пару недель назад разбираться :)

Код:

stop(); //Останавливаем на это кадре
if (vrsLoaded == "0") { // Проверка - загрузились ли переменные
        this.gotoAndPlay(2); //Если нет, то гоняем два кадра пока не загрузяться
}
txtStr = VrsLod.pageText1; //Передаю значение внешней переменной pageText1 к внутренней txtStr для удобства
textArray = txtStr.split(":::"); //Разделяю массив
trace(textArray); //Эта строка просто для того чтобы убедиться в том, что массив загружен
txtCounts = parseInt(VrsLod.textCount); //Перевожу внешнюю переменную указывающую количество статей на странице в числовое значение
trace("Количество статей - " + txtCounts);//Опять же для удобства
for (i = 0; i < txtCounts; i++) {  //Циклически создаю указанное в текстовом файле количество текстовых полей
        trace(i); //Опять же для удобства
        this.createTextField(("newText"+i.toString()),"",20,20,500,100); //Каждое текстовое поле имеет уникальное имя по индексу значений массива textArray чтобы каждая статья вписывалась в отдельное текстовое поле
        newText0.text = textArray[i]      //И ВОТ ЗДЕСЬ ТО ВСЯ ПРОБЛЕММА
        //вместо ноля в newText_.text нужно значение i!!! Как его сюда впихнуть
}

Для тех, кто из кода не поня суть проблеммы:
Вместо newText0.txt нужно ---- newText(значение переменной i).txt чтобы каждому вновь созданному полю циклически присваивались определенные параметры

Azy 14.12.2006 10:19

смотри ман по eval. Пример оттуда
Код:

name1 = "mike";
name2 = "debbie";
name3 = "logan";
for(i = 1; i <= 3; i++) {
    trace (eval("name" add i));        // Output: mike, debbie, logan
}


Cepreu4 14.12.2006 10:23

Огромнейшее спасибо :)))

Aziz Zaynutdinoff 14.12.2006 10:44

Можно и вот так:
Код:

newText[i].txt

Cepreu4 14.12.2006 11:58

шо, без приколов? А разве вот это -> [i] не индекс массива обозначает?? Т.е. я имею в виду разве так просто можно дописывать имена обычных переменных??
p.S. Я после кода немного ошибся, прошу пардон - не .txt а .text (параметр текстового поля)

CorC 14.12.2006 12:01

нет нельзя

Cepreu4 14.12.2006 12:33

Спасибо. За одно и ещё вопрос впаяю. С чем может быть связано странное поведение файла когда при Test Movie, Flash то компилит всё нормально и правильно выдает значения, то пропускает переменные и все получается наперекосяк. Причем пожно просто два раза подряд, ничего не меняя запусить тест и результаты буду разными. Раздражает очень сильно (могу ошибаться но помоему после воода в конструкцию оператора eval появилась такая хреновня)

Cepreu4 14.12.2006 12:37

А, всё! Уловил закономерность! Во всем виноваты trace();.
В коде много трэйсов для ослеживания правильной работы. Так вот если после последнего теста не закрыть output window и тут же запустить тест ещё раз, то получицца фигня.
Даже где-то читал, что при publish'е нужно обязательно ставить галку Omit Trace Actions

etc 14.12.2006 12:39

Aziz, прежде чем что-либо утверждать, необходимо проверить действительность и верность своего утверждения.

CorC 14.12.2006 16:19

я могу дать мувик 1 где все в коже жестоко задано но по-разному отображается на экране!
это зависит от загруженности проца, версии флеш, от характеристик компа

ALiEN_2OO6 14.12.2006 16:20

Можно вот так:

Код:

name1 = "mike";
name2 = "debbie";
name3 = "logan";

for(i = 1; i <= 3; i++) {
    trace (this["name"+i]);        // Output: mike, debbie, logan
}


†‡Paladin‡† 14.12.2006 18:00

Нафига трейсить если есть дебаггер? =\

etc 14.12.2006 18:20

Paladin, кому что нужно — тем и пользуется. Я никогда дебаггером не пользуюсь.

†‡Paladin‡† 14.12.2006 18:27

Имхо грех непользовать специально редназначеные для отладки инструменты, но имхо остается имхом конечно.

etc 14.12.2006 18:43

Если бы эти инструменты были нормально сделаны, я бы пользовался этим.

Cepreu4 15.12.2006 03:48

Такой вопрос из предыдущего кода...
Вот я допустим создал текстовое поле посредством this.createTextField();
Но мне нужно чтобы все эти поля располагались внутри одного МувиКлипа. Метод this.movieClip.createTextField(); уже почему то не прокатывает.
Дык вот как можно запихать эти текстовые поля с Мувик сразу после создания и определения всех параметров???

Aziz Zaynutdinoff 15.12.2006 04:19

Цитата:

Сообщение от __etc
Aziz, прежде чем что-либо утверждать, необходимо проверить действительность и верность своего утверждения.

Грубо ошибся... чего-то мозг думал одно, руки другое написали...
подразумевал:
Код:

["newText" + i].text;
//написал неверное newText[i].text

Приношу извинения автору темы за дезу...

etc 15.12.2006 13:01

Гм, ошибка в коде, тем не менее, осталась :)

Aziz Zaynutdinoff 15.12.2006 13:17

__etc, позвольте :) Какая?
Код:

this["newText" + i].text //опустил, ибо вопрос был куда впендюрить i :)

etc 15.12.2006 13:25

this опустил. Впрочем, это уже неважно.

Cepreu4 15.12.2006 15:49

А чё, мой последний вопрос в игнор??? :( Подскажите как отправить вновь созданное тескствое поле с определенными параметрами в нужный МувиКлип

Aziz Zaynutdinoff 15.12.2006 16:28

зачем отправлять его куда-то?... Создавай его сразу в нужном тебе MovieClip'е

ALiEN_2OO6 15.12.2006 16:35

Учись работать со ссылками!

Код:

// Получаем ссылку на объект
var container:MovieClip = this.createEmptyMovieClip("container", 1);

// Добавляем текстовое поле
var myText:TextField = container.createTextField("myText", 1, 0, 0, 100, 100);

container.x = 10;
container.y = 10;

myText.text = 'Убить всех человеков';


Aziz Zaynutdinoff 15.12.2006 16:38

если надо много текстовых полей, то вместо фиксированной глубины объекта ставишь this.getNextHighestDepth() или переменную цикла, в котором создаёшь эти поля...
но лучше getNextHighestDepth()

Cepreu4 16.12.2006 13:56

Вот контейнеры это крутая штука, спасибо, а насчет "Создавай его сразу в нужном тебе MovieClip'е" неполучаецца чего-то... То есть получается только создать. После создания я сразу же определяю свойства текстового поля подобным макаром:
Код:

(eval("newText" + i)).text = textArray[i];
(eval("newText" + i)).textColor = "0xeeeeff";

(ну к примеру)
И усе работает.. А вот если пишу так
Код:

this.textContainer.(eval("newText" + i)).text = textArray[i];
[iNils: Для оформления своего кода, надо использовать теги [code][/code]]

то что то уже нифига не получается

CorC 16.12.2006 14:05

Не
Код:

this.textContainer.(eval("newText" + i)).text = textArray[i];
a
Код:

this.textContainer["newText" + i].text = textArray[i];

etc 16.12.2006 14:07

Гм, а контейнеры от мувиклипов чем-то отличаются? :)
eval лучше не пользовать, гораздо проще:
Код:

this.textContainer['newText'+i].text = …
Болеее того, даже этого можно и не делать — createTextField вернет ссылку на только что созданный текстфилд.

з.Ы. Кстати, textColor — свойство типа Number, а не String.

Cepreu4 16.12.2006 17:28

CorC, если поставить точку перед скобками, компилер выдает ошибку - проверь сам
etc, спасибо, попробую
P.S. странно, но textColor определяется как с кавычками, так и без - только что проверил

etc 17.12.2006 02:46

Это называется автоматическое приведение типов, работает только в AS1 (и в AS2, если обмануть компилятор). AS3 такого не позволит. Лучше сразу соблюдать типизацию.

CorC 17.12.2006 11:41

Цитата:

Сообщение от Cepreu4
CorC, если поставить точку перед скобками, компилер выдает ошибку - проверь сам

я писал "Не"! а не "попробуй вот так:" читать внимательнее надо

Cepreu4 17.12.2006 15:30

А, sorry, это как раз я в своем посте неправильно написал


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

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