Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как коректно использовать this[param]; (http://www.flasher.ru/forum/showthread.php?t=139642)

Боня 06.05.2010 22:26

Как коректно использовать this[param];
 
Кто знает в чём проблема. Может быть неправильно использую. Поскажите пожалуйста.
Вот так работает:
Код AS3:

public function show_thing():void 
{
        var t_name1:String  = "new_thing";
 
            var new_thing :thing;
        new_thing = new thing();
        addChild(new_thing);
            new_thing.x = 15;
        new_thing.y = 100;
}

Вот так не работает:
Код AS3:

public function show_thing():void 
{
        var t_name1:String  = "new_thing";
 
            var new_thing :thing;
        new_thing = new thing();
        addChild(new_thing);
        this[t_name1].x = 15;
        new_thing.y = 100;
}

ReferenceError: Error #1069: Не удалось найти свойство new_thing в main.table; отсутствует значение по умолчанию.

Zebestov 06.05.2010 22:46

так и есть.
у тебя new_thing — локальная переменная и видна только в пределах функции show_thing().

PHILOSOFF 06.05.2010 23:15

Личноу меня ваш метод прокатил. Только что проверил на данном коде
Код AS3:

private function createMonstaer(e:TimerEvent):void
                {
                        var monst:String = "monster_mc";
                        monster_mc = new monster(newHealth, this);
                        this[monst].putOnRandomPlace(); // Данный метод сработал без проблем 
                        monster_Container.addChild(monster_mc);
 
                }

У вас класс динамический?

Цитата:

Сообщение от Zebestov (Сообщение 906429)
так и есть.
у тебя new_thing — локальная переменная и видна только в пределах функции show_thing().

Тк он и использует, насколько я понял, только в пределах этой функции.

udaaff 06.05.2010 23:31

PHILOSOFF, ваш вариант отличается.

Боня, если хотите по имени обращаться используйте getChildByName(). Имя соответственно задать нужно будет.

PHILOSOFF 06.05.2010 23:39

Цитата:

Сообщение от udaaff (Сообщение 906446)
PHILOSOFF, ваш вариант отличается.

Эм, честно говоря не вижу разницы.

Ну хорошо... напишу вот так :)

Код AS3:

private function createMonstaer(e:TimerEvent):void
                {
                        var monst:String = "monster_mc";
                        monster_mc = new monster(newHealth, this);
                        this[monst].x = 100;
                        monster_mc.y = 300;
                        monster_Container.addChild(monster_mc);
                }


Боня 06.05.2010 23:39

Цитата:

Сообщение от udaaff (Сообщение 906446)
PHILOSOFF, ваш вариант отличается.

Боня, если хотите по имени обращаться используйте getChildByName(). Имя соответственно задать нужно будет.

У меня суть такая: несколько клипов на экране и при нажатии на один из них, клип передаёт своё имя в функцию родителя. И что бы не использовать структуру case. Я хочу сразу подставлять что-то вроде:
new_shing : this[t_name1];

Цитата:

У вас класс динамический?
Нет.

PHILOSOFF 06.05.2010 23:45

Цитата:

Сообщение от Боня (Сообщение 906450)
Нет.

Ну тк попробуйте написать что класс динамический и возможно все прокатит

Код AS3:

public dynamic class NewGame extends ...
{
  ......
}


udaaff 06.05.2010 23:48

Цитата:

Сообщение от PHILOSOFF (Сообщение 906449)
Эм, честно говоря не вижу разницы.

Вы записываете ссылку в поле класса, а автор в локальную переменную функции.
Цитата:

Ну тк попробуйте написать что класс динамический и возможно все прокатит
dynamic нужно использовать ровно там, где это необходимо, а не где попало.

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

Боня 06.05.2010 23:49

PHILOSOFF
Должна же быть причина по которой у одного человека всё работает у другого нет. У меня в publish settings:
Flash Player 9.
Strict Mode выключен.

Добавлено через 10 минут
Интернет сбоит - жуть...
udaaff
У меня несколько клипов на экране и при нажатии на один из них, клип передаёт своё имя в функцию родителя. И что бы не использовать структуру case. Я хочу сразу подставлять что-то вроде:
Код AS3:

var t_name1:String = name + "()";
new_shing : new this[t_name1];

а то придётся:
Код AS3:

switch(name){
  case "logka":
    new_thing : new ogka();
    break;
  case "styl":
    new_thing : new styl();
    break;
}

Добавлено через 23 минуты
Цитата:

Сообщение от Zebestov (Сообщение 906429)
так и есть.
у тебя new_thing — локальная переменная и видна только в пределах функции show_thing().

А подругому и немогу. Иначе ради чего я это затеял никак работать не будет. В чём интерес так это в том что я могу вообще не писать в функцие:
Код AS3:

var new_thing:thing;
new_thing: new thing();

А сразу могу написать
Код AS3:

new_thing: new thing();

Работает правильно.

Psycho Tiger 07.05.2010 15:55

Цитата:

dynamic нужно использовать ровно там, где это необходимо, а не где попало.
Приведи пример =) Ни разу не пользовался dynamic, в плане явного его объявления. Object`ы не в счёт.

udaaff 07.05.2010 16:31

Цитата:

Сообщение от Psycho Tiger (Сообщение 906614)
Приведи пример =) Ни разу не пользовался dynamic, в плане явного его объявления. Object`ы не в счёт.

Использовал только в классах наследниках динамических классов, например URLVariables.

Psycho Tiger 07.05.2010 16:51

М, ну разве что там.
Я просто не понимаю людей, которые лепят dynamic, чтобы что-то там хранить в классе вместо создания поля класса.


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

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