2010-03-19 3 views
6

Решение:делает ActionScript AddChild требуется объект отображения первого

если у вас есть такая же проблема, addElement() вместо AddChild() является то, что это сделал


Я пытаясь отойти от mxml до actionctipt. У меня есть <s:Rect>, который я создал и установил его свойства, но не могу добавить его.

var aRect:Rect = new Rect(); 
//set properties like aRect.x, aRect.y, aRect.width, aRect.height 

//tried adding it various ways 
addChild(aRect); 
Application.addChild(aRect); 
Application.application.addChild(aRect); 
stage.addChild(aRect); 

Но я получаю ошибку 1067: Неявное приведение значения типа spark.primitives: Rect несвязанного типа flash.display: DisplayObject

Первоначально в MXML, это было прямо внутри <s:Application> не вложенное ничего

<s:Application> 

    <s:Rect id="aRect" x="10" y="10" width="15%" height="15%"> 
     //then fill code here, removed for readability 
    </s:Rect> 

</s:Application> 

в чем дело, я думал, что будет ActionScript лучше, чем MXML.

+0

Никогда не использовал Flex 4 перед тем, но я интересуюсь этим. Надеюсь, вы получите ответ. –

+0

Является ли ваш пример кода из класса документа или любого другого класса? – JanD

+0

@JanD, код находится прямо в главном приложении mxml (у меня есть только один mxml, никакие компоненты или что-то еще), и, конечно, код actionscript находится в функции init() в теге скрипта и запускается при созданииComplete, в значительной степени точно обычном. За исключением того, что я сейчас пытаюсь создать эти визуальные элементы wi го действия. – touB

ответ

1

Это связано с тем, что Flex 4 значительно изменил способ работы иерархии отображения в приложениях на основе MXML. Это немного запутанно, так как addChild() больше не работает так просто, как вам бы хотелось - вам нужно добавить элементы в dataprovider, а затем логику отображения этих элементов (какие из них добавить, где, как их скрыть , и т. д.) обрабатывается в другом месте. Это своего рода полезное изменение, хотя, потому что оно заставляет вас разделять ваши проблемы очень конкретным образом. После того, как вы добавите свои элементы в свой файл данных, вы можете поменять местами объекты макета (даже во время выполнения), чтобы изменить внешний вид приложения.

EDIT: Технически это не сам displayList, который они изменили. Это факт, что базовая единица, используемая Flex, теперь является группой «Группа» - даже s: Приложение расширяет группу. Вы добавляете свой контент в группу (или в приложение верхнего уровня), а затем назначаете группе макет, чтобы сообщить, как отображать добавленные вами элементы.

+0

Myk вас интересует сообщение в блоге об этом и, возможно, добавив его к вашему ответу здесь. Часть о том, что «После того, как вы добавили свои элементы в свой файл данных, вы можете поменять местами объекты макета (даже во время выполнения), чтобы изменить внешний вид вашего приложения». особенно интересен и, вероятно, более понятен с кодом, чем словами. Благодарю. – touB

+0

Ха, я полагаю, кто-то должен, вероятно, написать это - я знаю, что кулинарная книга Flex 4 от печати O'Reilly действительно помогает объяснить это. Это должно скоро закончиться. Тем временем я буду искать хорошую запись, я уверен, что там что-то есть - если я найду ее, я отправлю ее здесь. – Myk

+0

Вот видео-учебник, объясняющий это - http://flex4.org/2009/06/23/flex-4-layouts/ В принципе, большинство представлений Flex 4 (включая s: Application) имеют свойство макета. Это определяет, как отображаются объекты, и вы можете создавать свои собственные макеты в дополнение к четырем основным. Видео объясняет это довольно хорошо! – Myk

0

Да, вам нужен объект DisplayObject. Я не знаком с spark.primitives.Rect, но, возможно, вы могли бы просто создать новый Sprite и вызвать методы на своем объекте Graphics для рисования прямоугольника?

0

Согласно действующим документам, метод addChild класса Application требует, чтобы он был объектом displayObject.

2

попытался сменить addChild(aRect); на addElement(aRect);, и это сработало красиво.

0

Раздражающе, мы будем часто пытаться добавить flash-ресурсы (swf swc) (объекты отображения) с помощью addElement.

Я работаю на пути, чтобы сделать это прямо сейчас :(больше обручи и прыжки

Кроме того, мой МЖК не доступен в проводнике пакетов (почему нет?)

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