Форум 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=113708)

olexandr 06.07.2008 22:53

классовую переменную не видно внутри функции
 
Добрый день! Понимаю, что вопрос мелочный, но с классами недавно начал дружить и в аське спросить сейчас не у кого. Может тут кто поможет :)

Код:

import mx.transitions.Tween;
class Item extends MovieClip {
    var mc:MovieClip;
    var id:Number;
    var nativeX:Number;
    var label:TextField
    function Item() {
        mc = this;
        mc._x = mc.id * mc._width
        mc.nativeX = mc._x;
        mc.label.text = _root.xmlD.childNodes[0].childNodes[mc.id].attributes.text;
        mc.onRollOver = eventRollOver;
        mc.onRollOut = eventRollOut;
    }
    function eventRollOver(){
        var scaleX:Tween = new Tween(mc, '_xscale', mx.transitions.easing.None.easeNone, mc._xscale, _root.scalingArr[0], _root.duration, true);
        var scaleY:Tween = new Tween(mc, '_yscale', mx.transitions.easing.None.easeNone, mc._yscale, _root.scalingArr[0], _root.duration, true);
        scaleY.onMotionChanged = eventMotionChanged;
    }
    function eventRollOut(){
        var scaleX:Tween = new Tween(mc, '_xscale', mx.transitions.easing.None.easeNone, mc._xscale, 100, _root.duration, true);
        var scaleY:Tween = new Tween(mc, '_yscale', mx.transitions.easing.None.easeNone, mc._yscale, 100, _root.duration, true);
    }
    function eventMotionChanged(){
        trace(mc);
    }
}

Как из последней функции увидеть mc? Сейчас получаю undefined.

iNils 07.07.2008 01:00

Проблемы была в смене областей видимости
Код:

import mx.transitions.Tween;
import mx.utils.Delegate;
class Item extends MovieClip {
        var mc:MovieClip;
        var id:Number;
        var nativeX:Number;
        var label:TextField
        function Item() {
                mc = this;
                mc._x = mc.id * mc._width
                mc.nativeX = mc._x;
                mc.label.text = _root.xmlD.childNodes[0].childNodes[mc.id].attributes.text;
                mc.onRollOver = Delegate.create (this, eventRollOver);
                mc.onRollOut = Delegate.create (this, eventRollOut);

        }
        function eventRollOver(){
                var scaleX:Tween = new Tween(mc, '_xscale', mx.transitions.easing.None.easeNone, mc._xscale, _root.scalingArr[0], _root.duration, true);
                var scaleY:Tween = new Tween(mc, '_yscale', mx.transitions.easing.None.easeNone, mc._yscale, _root.scalingArr[0], _root.duration, true);
                scaleY.onMotionChanged = Delegate.create (this, eventMotionChanged);
        }
        function eventRollOut(){
                var scaleX:Tween = new Tween(mc, '_xscale', mx.transitions.easing.None.easeNone, mc._xscale, 100, _root.duration, true);
                var scaleY:Tween = new Tween(mc, '_yscale', mx.transitions.easing.None.easeNone, mc._yscale, 100, _root.duration, true);
        }
        function eventMotionChanged(){
                trace(mc);
        }
}


olexandr 07.07.2008 01:27

Большое спасибо! Догадывался, что решаться будет с помощью Delegate, но никогда его не использовал! Все классно теперь!


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

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