Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с обращением к child объекта из слушателя этого объекта (http://www.flasher.ru/forum/showthread.php?t=128766)

formid 17.08.2009 01:58

Проблема с обращением к child объекта из слушателя этого объекта
 
вобщемто все видно из кода

Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.geom.*;
        import flash.text.*;
 
        public class Trash extends MovieClip
        {
                public var mc1:Sprite = new Sprite();
                public var txt:TextField;
 
                public function Trash():void
                {
 
                        mc1.graphics.beginFill(0x000000);
                        mc1.graphics.drawRect(150,50,50,50);
                        mc1.graphics.endFill();
                        addChild(mc1);
 
                        txt = new TextField();
                        txt.multiline = true;
                        txt.wordWrap = true;
                        txt.width = 100;
                        txt.height = 100;
                        txt.x=50;
                        txt.y =150;
                        txt.text = "ewwwwwwwwwwwwwwwwwwwwwwwwwwewew ew ew ew        ewew ewe we wewewefkdsgf ksgkjfsgn kjlhks kjfs fslkgn kjgkj sfkjg fdkjbzcnvfnvlknfslkvgnlksnglksnglksnglslkjndlsnflksmk mswkk skfdfsfkdsmfkdsjrieahrirutrwhfnbsvbjdhfkjlsahfewjiwjrfijfsdfkljdsflkjdsfkjdskfjdskfjdksjfkdsjflkdsjfkldsjflkjdskfjdsncncmznm,n3ruweporuewirue33333333333333333333333333333333jjrerjekrjkejreiiii99999999999999999999999o";
                        mc1.addChild(txt);
                        mc1.addEventListener(MouseEvent.CLICK,click1);
                }
                public function click1(e:Event):void
                {
                        //trace(mc1.getChildAt(0));  // работает, выводит [object TextField]
                        //trace(mc1.getChildAt(0).numLines);  //Ошибка Acces of possibly undefined property numLines a reference with static type flash.display:DisplayObject
                        //trace(mc1.txt);//Ошибка Acces of possibly undefined property txt a reference with static type flash.display:Sprite
                        //trace(e.target.getChildAt(0).numLines);  // работает, вывод 25
                        //trace(e.target.txt); //  Ошибка  Не удалось найти свойство txt в flash.display.Sprite; отсутствует значение по умолчанию
                }
        }
}


etc 17.08.2009 07:53

Не видно. Что вы хотите?

cleptoman 17.08.2009 10:47

у вас нет свойства txt внутри mc1. вы его объявляете там же где и mc1.
trace(txt);

formid 17.08.2009 15:41

txt потомок mc1. Если я обращаюсь к нему из функции листенера mc1.getChildAt(0) тогда правильно выводит ТекстФилд, а если я пытаюсь получить количество строк откудато берется ошибка?

Изначально задача была такая. При нажатии на мс1 запускается Листенер MOUSE_MOVE, который выдает количество строк в txt. Если листенер запускать на мс1 то он не работает если мышь выходит за его пределы. Значит листенер нужна задавать на stage но как тогда получить количество строк в txt?

Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.geom.*;
        import flash.text.*;
 
        public class Trash extends MovieClip
        {
                public var mc1:Sprite = new Sprite();
                public var txt:TextField;
 
                public function Trash():void
                {
 
                        mc1.graphics.beginFill(0x000000);
                        mc1.graphics.drawRect(150,50,50,50);
                        mc1.graphics.endFill();
                        addChild(mc1);
 
                        txt = new TextField();
                        txt.multiline = true;
                        txt.wordWrap = true;
                        txt.width = 100;
                        txt.height = 100;
                        txt.x=50;
                        txt.y =150;
                        txt.name="txt";
                        txt.text = "ewwwwwwwwwwwwwwwwwwwwwwwwwwewew ew ew ew        ewew ewe we wewewefkdsgf ksgkjfsgn kjlhks kjfs fslkgn kjgkj sfkjg fdkjbzcnvfnvlknfslkvgnlksnglksnglksnglslkjndlsnflksmk mswkk skfdfsfkdsmfkdsjrieahrirutrwhfnbsvbjdhfkjlsahfewjiwjrfijfsdfkljdsflkjdsfkjdskfjdskfjdksjfkdsjflkdsjfkldsjflkjdskfjdsncncmznm,n3ruweporuewirue33333333333333333333333333333333jjrerjekrjkejreiiii99999999999999999999999o";
                        mc1.addChild(txt);
                        mc1.addEventListener(MouseEvent.MOUSE_DOWN,click1);
                }
                public function click1(e:Event):void
                {
                        //stage.addEventListener(MouseEvent.MOUSE_MOVE,stageMov);
                        e.target.addEventListener(MouseEvent.MOUSE_MOVE,mc1Mov);
                }
                /*public function stageMov(e:MouseEvent):void
                {
                        trace(mc1.getChildAt(0).numLines);
                }*/

                public function mc1Mov(e:MouseEvent):void
                {
                        trace(e.target.getChildAt(0).numLines);
                }
        }
}


etc 17.08.2009 15:44

Возвращаемый объект по getChildAt нужно кастить к соответствующему типу, в данном случае, к TextField. Но зачем такие извращения, если изначально есть txt?

formid 17.08.2009 16:12

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

dimarik 18.08.2009 21:05

Код AS3:

var textField:TextField = mc1.getChildAt(0) as TextField;
trace(textField.numLines);



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

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