2011-01-28 5 views
0

Как я могу получить экранный объект на сцене/root из класса?получить экранный объект на сцене/корне?

текстовое поле txt находится в корне, но как я могу получить его из класса?

var txt = new TextField(); 
with(txt){ 
    type = TextFieldType.INPUT; 
    border = true; 
    textColor = 0xffffff; 
    multiline = true; 
    x = 20; 
    y = 20; 
    width = 270; 
    height = 40; 
} 
addChild(txt); 
txt.name = 'test'; 

class classTest { 
    public function classTest{ 
     trace(this.getChildByName('test')); 
    } 
} 
var cls = new classTest(); 
+0

Выполняете ли вы этот код через шкалу времени или класс документа? – Taurayi

+0

Попытка вызвать getChildByName() вызовет ошибку компилятора, потому что класс classTest не имеет этого метода. classTest должен подклассифицировать класс Sprite или MovieClip для наследования getChildByName(). – Taurayi

ответ

1

Не совсем уверен, что вы делаете, но самым простым способом было бы проанализировать ссылку на root или объект DisplayObject, содержащий ваш объект Textfield, а затем получить доступ к объекту TextField с помощью этой ссылки в классе ClassTest.

var txt:TextField = new TextField(); 

with(txt) 
{ 
    type = TextFieldType.INPUT;  
    border = true; 
    textColor = 0xffffff; 
    multiline = true;  
    x = 20;  
    y = 20;  
    width = 270;  
    height = 40; 
} 

addChild(txt); 
txt.name = 'test'; 

class ClassTest 
{ 
    public function ClassTest(p_target:DisplayObjectContainer) 
    {   
      trace(p_target.getChildByName("test")); 

    } // end function 

}// end function 

var classText:ClassText = new ClassTest(this); // parse a reference to root 
0

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

txt.name = "txt_1"; 
this.getChildByName("txt_1"); 

UPDATE

лучше не делать так. это лучше использовать события для обмена данными между классами, но все равно:

class classTest { 
    private var _r : MovieClip; //not sure about the type 
    public function classTest(r:MovieClip){ 
     _r = r; 
     trace(_r.getChildByName('test')); 
    } 
} 
var cls = new classTest(this); 
+0

ok .. но если область действия - класс, это будет класс. Как я могу ссылаться на область сцены/корня? – clarkk

+0

если вы используете такой код, как addChild (txt); то вы можете использовать код типа getChildByName ("txt_1"); это будет относиться к детям сцены. попробуй это. –

+0

проверить мой код снова – clarkk

0

(в новом файле класса)

import flash.display.Sprite; 
import flash.events.Event; 

public class classTest extends Sprite 
{ 
    public function classTest 
    { 
     addEventListener(Event.ADDED_TO_STAGE, added, false, 0, true); 
    } 

    private function added(evt:Event):void 
    { 
     trace(stage.getChildByName("test")); 
    } 
} 

Event.ADDED_TO_STAGE позволит вам ссылаться на сцену, когда он срабатывает, разрешающий вы инстанцирован класс и добавили его на сцену (именно поэтому событие должно срабатывать в первую очередь).

Смежные вопросы