Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как в свойстве объекта сослаться на TextField? (http://www.flasher.ru/forum/showthread.php?t=100133)

Torero 20.08.2007 21:24

Как в свойстве объекта сослаться на TextField?
 
Не стреляйте - сформулировал как мог.:)

Беда в следующем:
конструкции типа "arr[0]=new TextField()" AS3 разрешает, а конструкции типа "arr[0].txt=new Textfield()" - нет.

Нерабочий код:
Код:

import flash.text.TextField;
        var tx_arr:Array=[];
        function elem(){
                this.txt =new TextField();
                this.txt.text="FirstText"
        }
        tx_arr[0]=new elem();
        addChild(tx_arr[0].txt);


Dima_DPE 20.08.2007 21:32

arr[0].txt=new Textfield() флеш разрешает!, только перед этим надо написать что то вроде
Код:

arr[0]=new Object();
arr[0].txt =new TextField();
arr[0].txt.text="FirstText"


etc 20.08.2007 21:38

Torero, так в AS3 не пишут. Если надо создать класс — создай его. И заканчивай писать код в кадрах.

Torero 20.08.2007 22:03

Спс. Про "new Object()" не догадался.:drinks:

Еще вопросик: почему при выполнении кода на экране ничего не отображается. хотя трассировка показывает, что все гут?

Код:

for(var z:uint=0; z<2; z++){
        tx_arr[z]=new Object();
        tx_arr[z].txt=new TextField();
        tx_arr[z].txt.text="SomeText"+z;
        addChild(tx_arr[z].txt);
        trace(tx_arr[z].txt.text);
}

---------------------------
2_etc: Код в кадрах, лично я, писать и не начинал. Здесь его привел в такой форме просто для того, чтобы примером можно было легче воспользоваться если вдруг кто захочет проверить.

Dima_DPE 20.08.2007 22:11

В этом коде все гуд. Тут вопрос где этот код выполняется.

Torero 20.08.2007 22:49

Ты прав. Непонятка в другом месте, но не знаю где:
ситуация следующая: из одного класса("D") создаю экземпляр другого класса("E"). В классе "E" создаю TextField, однако на экране он не отображается.

D:
Код:

package {
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
        public class D extends Sprite {
                public function D(){
                        var inst:Object;
                        var cla:Class;
                        cla=getDefinitionByName("E")
                        inst = new cla();
                }
    }
}

E:
Код:

package {
import flash.display.Sprite;
import flash.text.TextField;
        public class E extends Sprite {
                public function E(){
                        trace("E loaded");
                        var t:TextField=new TextField();
                        t.text="SomeText";
                }
        }
}


lowka 20.08.2007 23:29

Цитата:

Сообщение от Torero
D:
Код:

package {
        import flash.display.Sprite;
        import flash.utils.getDefinitionByName;
        public class D extends Sprite {
                public function D(){
                        var inst:Object;
                        var cla:Class;
                        cla=getDefinitionByName("E");
                        inst = new cla();
                        this.addChild(inst as Sprite);
                }
    }
}

E:
Код:

package {
        import flash.display.Sprite;
        import flash.text.TextField;
        public class E extends Sprite {
                public function E(){
                        trace("E loaded");
                        var t:TextField=new TextField();
                        t.text="SomeText";
                        this.addChild(t);
                }
        }
}


Так попробуйте.

Torero 20.08.2007 23:57

Работает. Спасибо.

Dendroid 21.08.2007 01:26

Код:

var tx_arr:Array=[];
function newTF(initText:String):TextField {
        var txt:TextField = new TextField();
        txt.text = initText;
        return txt;
}
addChild(tx_arr[0] = newTF("first text"));

2__etc: А можно мне продолжать писать код во фреймах? :umnik2: Я обычно хороший код пишу, не какой-нибудь там чопапалошний нерабочий... :)

Torero 21.08.2007 03:38

Вопрос в продолжение темы...
Как при срабатывании мышиного события сослаться на родительский объект?

Код:

package {
import flash.display.Sprite;
import flash.events.MouseEvent;
        public class D extends Sprite {
                public function D(){
                        var obj:Object=new Object();
                        obj.container=new Sprite();
                        addChild(obj.container);
                       
                        obj.rect1=new Sprite();
                        obj.rect1.graphics.beginFill(0xFF0000);
                        obj.rect1.graphics.drawRect(0, 0, 90, 38);
                               
                        obj.rect2=new Sprite();
                        obj.rect2.graphics.beginFill(0x0000FF);
                        obj.rect2.graphics.drawRect(0, 40, 90, 38);

                        obj.container.addChild(obj.rect1);
                        obj.container.addChild(obj.rect2);
                        obj.rect2.addEventListener(MouseEvent.MOUSE_OVER, changerect);
                       
                        function changerect(event:MouseEvent):void{
                                trace("Rolled Over.        "+event.target.parent+"; "+event.target.parent.numChildren);
                                event.target.x+=40;
                                event.target.parent.getChildByName("obj.rect1").x+=100;
                        }
                }
        }
}


-------
Вопрос решил, использовав getChildAt(0), но почему getChildByName не сработал?


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

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