Форум 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)
-   -   MC: ссылка на себя. Правильно-ли? (http://www.flasher.ru/forum/showthread.php?t=143984)

mj_nooker 30.08.2010 21:41

MC: ссылка на себя. Правильно-ли?
 
Привет!

В мувике создаю ссылку на самого себя:
Код AS1/AS2:

var thisLink:MovieClip = this;

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

В целом, приём пока работает.

Но решил спросить у людей, имеющих опыт побогаче моего:
  1. Правильно-ли я делаю, что создаю и использую такую ссылку?
  2. Какие возможные баги и скрытые камни данного способа?
  3. Правильно-ли я делаю, что объявляю её тип как MovieClip? может правильнее Object? или вообще не объявлять?
    Тоесть есть-ли вариант более правильного объявления?
  4. Есть-ли вариант (приём) вообще более правильный, чем создание ссылки на самого себя (если баги у данного способа всё-таки есть)?

Что более правильнее:
Код AS1/AS2:

var thisLink:MovieClip = this;

Код AS1/AS2:

var thisLink = this;

Код AS1/AS2:

thisLink = this;

?

Спасибо!

mooncar 30.08.2010 22:49

Вы все делаете нормально.
А тип данных, конечно же, лучше объявлять.

rainbowrussia 30.08.2010 23:08

Для чего в самом себе делать ссылку на самого себя?

FriOne 30.08.2010 23:43

Тож интересно.. nj_nooler вам для чего?

mooncar 30.08.2010 23:51

Иногда бывает надо.
Например, бывают функции, в которых если употребить this, то ссылка будет не на текущий объект, где написан код.
А обратиться нужно.

Добавлено через 10 минут
Вот пример:
Код AS1/AS2:

import mx.transitions.Tween;
var NoN:Object = mx.transitions.easing.None.easeNone;
 
var curr:MovieClip = this ;
 
xTween(my_mc, my_mc._x + 100, 3);
 
function xTween (mc:MovieClip, fin:Number, t:Number)
{
        var mcOn:Tween = new Tween(mc, '_x', NoN, mc._x, fin, t, true);
        mcOn.onMotionChanged = function()
        {
        //допустим, в этой функции нужно ссылаться на текущий таймлайн, чтобы например, обратиться
        // к каким-то другим объектамм на нем - переменным, мувикам               
 
        //тут, внутри обработчика события, this будет ссылаться на объект Tween,
        //например, можно выводить текущее время твина:
        trace(this.time);
        //а вот как сослаться на текущий таймлан?
 
        //один способ - задали в начале ссылку на текущий таймлайн и ее используем
        trace(curr);
 
        //второй  способ:
        trace(this.obj._parent);
        // - используя внутреннее свойство Tween obj - ссылку на объект, над которым tween выполняется       
        //но это не очевидно - обращаемся к текущему таймлайну как к родителю мувика,
        //который там находится, который двигаем. Кривовато. Потому 1-й способ лучше.
        };
}


udaaff 31.08.2010 00:09

Я так понял, что автор на классах пишет. Если это так, то способ не верный. Нужно вызывать метод в верной области видимости с помощью делегата.

upd: иначе непонятно зачем это надо.

etc 31.08.2010 00:13

1. Нет;
2. Сжирает память, нечитабельный код;
3. В данном случае это не принципиально ввиду п. 1;
4. Delegate.

Что такое хорошо? 31.08.2010 02:12

Код AS1/AS2:

trace(targetPath(this));


mj_nooker 31.08.2010 15:24

mooncar, спасибо за точный и втемный ответ

Цитата:

Сообщение от udaaff (Сообщение 932495)
Я так понял, что автор на классах пишет.

нет

Цитата:

Сообщение от etc (Сообщение 932496)
2. Сжирает память, нечитабельный код;

а почему сжирает? смотрел на расход памяти и на загрузку проца - ничего не заметно.
остальные пункты ответа проигнорены ввиду их несоответствия действительности :)

Цитата:

Сообщение от Что такое хорошо? (Сообщение 932519)
Код AS1/AS2:

trace(targetPath(this));


ээ.. а что это? как с помошью этого обратиться к мувику родителю твина в функции, вложенной в функцию onMotionFinished? ;)

Цитата:

Сообщение от rainbowrussia (Сообщение 932470)
Для чего в самом себе делать ссылку на самого себя?

прежде чем отвечать - относитесь внимательно и с уважением к мыслям писаки ))

всем ответившим спасибо!

etc 31.08.2010 15:36

Цитата:

Сообщение от mj_nooker (Сообщение 932641)
остальные пункты ответа проигнорены ввиду их несоответствия действительности :)

Что значит «не соответствует действительности»? Вы считаете, что делаете правильно? ОК, тогда зачем была создана тема?


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

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