2009-12-21 3 views
0

Что касается проекта as3: Есть ли способ наследовать свойства данного объекта DisplayObject? Я ищу один метод, который будет захватывать что-то вроде x, y, width, height, color и т. Д. Что бы ни было связано с общими классами между двумя экранными объектами.Наследующие свойства от DisplayObject

...

Edit:

Я не думаю, что было достаточно ясно ... Позвольте мне привести пример типа функциональности я искал.

var sp1:Sprite = new Sprite(); 
sp1.x = 30; 
sp1.y = 30; 
sp1.width = 500; 
sp1.height = 30; 
var tf1:TextField = new TextField(); 
tf1.inheritTransform(sp1); 

Таким образом, в данном случае я знаю, что метод «inheritTransform()» не существует, но мне интересно, если есть что-то подобное. Или, может быть, мне не хватает возможности расширить класс? Я не вижу, как эти два будут связаны в таком случае.

Спасибо, JML

ответ

1

Сначала в общем, TextField является DisplayObject так, то есть x, y, width и height.

Но, поправьте меня, если я ошибаюсь, если вы не будете «копировать» свойства из одного объекта DisplayObject (или любого объекта) другому, вы можете сделать это вручную, я думаю, что нет «автоматического», способ сделать это. Вы можете использовать Prototype (или Prefab) для этого, но вы должны его реализовать.

Вы не можете наследовать значение свойства во время выполнения, вы унаследовали саму собственность, а не его значение (если имущество является собственностью Instance, как x. y, width и height).

И другая вещь, которую вы можете сделать это:

var s:Sprite = new Sprite() 
s.x = 125 
s.y = 200 
var t:TextField = new TextField() 
s.addChild(t) // here t transformation matrix is concatenated with s (because now t is inside s coordinate system because is a child of s) 

И другая вещь, которая может помочь вам это transform свойство DisplayObject класса, что transform содержит информацию о положении, поворот и масштаб (в матрица) и информацию о цвете. Это может вам помочь.

В вашем примере вы можете сделать это:

var s:Sprite = new Sprite() 
s.x = 30 
s.y = 30 
s.width = 500 
s.height = 30 
var t:TextField = new TextField() 
t.transform = s.transform // this overrides the transform object, but sadly don't work with the width and height 
t.width = s.width 
t.height = s.height 

PS: Извините за мой плохой английский.

EDIT:

Вы можете использовать только addChildremoveChild) с DisplayObjectContainer, пожалуйста, см http://livedocs.adobe.com/flex/3/html/help.html?content=05_Display_Programming_03.html

+0

замечательная помощь здесь. очень информативный ... мне было бы интересно, если кто-то еще обнаружит, что есть еще один «автоматический» способ сделать это.также есть ли способ заставить метод .transform работать правильно. – jml

+0

Я думаю, что прямо сейчас, независимо от того, что будет отображаться в файлеDisplayObject.addChild (otherDisplayObject), и работает довольно хорошо с точки зрения xy. – jml

+1

Дело в том, что каждый объект DisplayObject имеет свою собственную систему координат, поэтому, когда вы добавляете друг друга (только для DisplayObjectContainer это может сделать), дочерние элементы теперь находятся в системе координат их отца, поэтому матрица преобразования конкатенирована (помните что матрица имеет 'x',' y', 'scaleX',' scaleY' и 'rotation' –

1

Actionscript 3 ссылки язык говорит:
The DisplayObject class itself does not include any APIs for rendering content onscreen. For that reason, if you want create a custom subclass of the DisplayObject class, you will want to extend one of its subclasses that do have APIs for rendering content onscreen, such as the Shape, Sprite, Bitmap, SimpleButton, TextField, or MovieClip class.

+0

... Да никто не читает ссылку долбанные язык. –

+0

И это тоже хорошая ссылка! – Aaron

+0

Я обновил содержание своего вопроса - надеюсь, это разъясняет, что я пытаюсь сделать. – jml

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