Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему не могу обратиться к свойству? (http://www.flasher.ru/forum/showthread.php?t=203988)

grafillo! 14.10.2013 15:57

Почему не могу обратиться к свойству?
 
Не пойму, почему я не могу обратиться к аргументу foto через родителя - муви клип, пишет свойство неопределено((
Код AS3:

var fotoMovie:MovieClip = new MovieClip;
            fotoMovie.addChild(foto);
            prvWidth = fotoMovie.foto.width;
            prvX = fotoMovie.foto.x;


WisP 14.10.2013 16:12

Если есть ссылка foto, то используйте ссылку.
Код AS3:

var fotoMovie:MovieClip = new MovieClip;
            fotoMovie.addChild(foto);
            prvWidth = foto.width;
            prvX = foto.x;

Или имя задайте.
Код AS3:

var fotoMovie:MovieClip = new MovieClip;
            fotoMovie.addChild(foto);
            foto.name = "foto";
            prvWidth = fotoMovie.foto.width;
            prvX = fotoMovie.foto.x;


grafillo! 14.10.2013 16:20

не, не помагает блин не могу понять в чём проблема, ведь foto это и есть имя лоадера, а обратиться к нему не могу(((
Код AS3:

function ldfoto (f:String) {
                        //trace ("свич"+_switch+"login"+lentaFoto[_switch].@login);
                        var foto:Loader = new Loader;
                        foto.load(new URLRequest(f)); // здесь нужно загружать фото
                        foto.contentLoaderInfo.addEventListener(Event.COMPLETE, addFirst);
 
                function addFirst ():void{       
                if (foto.width > 100){
                        foto.width=100;
                foto.scaleY = foto.scaleX;
                }
                if (foto.height>100){
                foto.height=100;
                foto.scaleX = foto.scaleY;
                }
 
                var fotoMovie:MovieClip = new MovieClip;
                fotoMovie.addChild(foto);
                fotoMovie.x =prvWidth+prvX+3;
                fotoMovie.y = 100-fotoMovie.foto.height;


Wolsh 14.10.2013 16:32

Потому что вложенные функции — Зло.

grafillo! 14.10.2013 16:43

а что же делать? и в чём причина?

Wolsh 14.10.2013 16:46

Вынести function addFirst ():void из функции ldfoto (f:String)

Причина проста — в момент, когда будет вызван addFirst (обработчик события), функция ldfoto уже отработает (это доли миллисекунд), и доступа к ее переменным больше не будет. А var foto это локальная переменная.

Добавлено через 4 минуты
И включите уже строгий режим компиляции. Ваш код невозможен. Позвольте компилятору указать на Ваши ошибки.
Например, Ваш обработчик не принимает параметр Событие. А должен.

grafillo! 14.10.2013 17:55

Цитата:

Вынести function addFirst ():void из функции ldfoto (f:String)
- это типа надо из функции ldfoto передать параметр в функцию addFirst ()?
а почему я вот так тоже не могу вызвать, объект foto, ведь он добавлен на сцену в мувеклипе и по идее должен иметь имя такое как при добавлении((
Код AS3:

function lentaOver (e:MouseEvent){
 
        e.target.foto.y = 200;
 
        }

я посмарел у меня стоит строгий режим компиляции х)

Akopalipsis 14.10.2013 18:22

Примерно вот так -
Код AS3:

package
{
        import flash.display.DisplayObject;
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.net.URLRequest;
        public class NewClass extends Sprite
        {
 
                public function NewClass()
                {
                        if (stage)init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(event:Event=null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        var loader:Loader = new Loader();
                        super.addChild(loader);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler);
                        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loader_ioErrorHandler);
                        try
                        {
                                loader.load(new URLRequest('img0.png'));
                        }
                        catch (error:Error)
                        {
                                trace(error.message);
                        }
                }
 
                private function loader_ioErrorHandler(event:IOErrorEvent):void
                {
                        trace(event.type)
                }
 
                private function loader_completeHandler(event:Event):void
                {
                        trace(event.type);
                        /**
                        * и вот тут уже делаете что Вам угодно с загруженным контентом
                        * обратится к loaderu - event.target
                        * обратится к контенту - event.target.content
                        */

                }
 
        }
}


Bletraut 14.10.2013 19:00

Цитата:

Сообщение от grafillo! (Сообщение 1148652)
не, не помагает блин не могу понять в чём проблема, ведь foto это и есть имя лоадера, а обратиться к нему не могу(((
Код AS3:

function ldfoto (f:String) {
                        //trace ("свич"+_switch+"login"+lentaFoto[_switch].@login);
                        var foto:Loader = new Loader;
                        foto.load(new URLRequest(f)); // здесь нужно загружать фото
                        foto.contentLoaderInfo.addEventListener(Event.COMPLETE, addFirst);
 
                function addFirst ():void{       
                if (foto.width > 100){
                        foto.width=100;
                foto.scaleY = foto.scaleX;
                }
                if (foto.height>100){
                foto.height=100;
                foto.scaleX = foto.scaleY;
                }
 
                var fotoMovie:MovieClip = new MovieClip;
                fotoMovie.addChild(foto);
                fotoMovie.x =prvWidth+prvX+3;
                fotoMovie.y = 100-fotoMovie.foto.height;


Всё потому что переменной foto присвоено значение лоудера, переменная не является свойством мувика fotoMovie, нужно либо найти ребенка через getChild, либо так на переменную foto и ссылаться.

grafillo! 14.10.2013 19:05

вообщем с лоадером разобрался, нужно создать дисплей обжект и приравнять лоадер тогда норм можно через дисплей обж обращаться
возникает следующий вопрос, не могу обратиться к объекту лента текст добавленному в foto:MovieClip, те функция lentaOver не работает

Код AS3:

function addLentaAtribute (foto:MovieClip){ 
                        var lentaTxt:lentaText = new lentaText;
 
                        lentaTxt.width = 300;
                        lentaTxt.y = 100;
                        foto.addChild(lentaTxt);
 
                        foto.addEventListener(MouseEvent.CLICK, openDialogWindow);
                        foto.addEventListener(MouseEvent.MOUSE_OVER, lentaOver);
                        foto.addEventListener(MouseEvent.MOUSE_OUT, lentaOut);
                        }       
function lentaOver (e:MouseEvent){
 
 
        e.target.lentaTxt.width = 200;
 
 
        }


Bletraut 14.10.2013 19:23

Цитата:

Сообщение от grafillo! (Сообщение 1148689)
как так ссылаться то?

Код AS3:

foto.width



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

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