Компонент пользовательского интерфейса: два класса - один рисует, другой нет (Flex / AS) - PullRequest
0 голосов
/ 30 ноября 2011

Я работаю с проектом flex с основным файлом mxml и двумя классами ActionScript, которые рисуют графику. Прочитав тонны статей и постов, я обнаружил, что они должны расширять UIComponent, что они и делают. Первый класс actionscript отлично рисует изображение. Первый класс затем вызывает для создания нового объекта. Второй объект не отображается. В чистой версии ActionScript мне нужно было пройти сцену как ссылку для рисования второго класса.

Я также нашел подобный вопрос здесь в stackoverflow: Расширенный класс UIComponent не показывает расширенный класс UIComponent . Но я не был уверен, как применить это к моему примеру.

Что, если какие-либо методы UIComponent должны быть переопределены для отображения второго объекта? Как конкретно я должен реализовать их в этом примере?

Если есть лучший или более простой ответ на эту проблему, это также приветствуется. Это упрощенный пример проблемы с более сложным проектом.

// First class "Ball" draws a circle successfully then creates a second object "MyRect" 

        package dr {
        import flash.display.*;
        import flash.display.Sprite;

        import mx.core.*;

        public class Ball extends UIComponent {
            public function Ball()
            {
                var vCircle:Sprite = new Sprite();
                vCircle.graphics.beginFill(0xff0000);
                vCircle.graphics.drawCircle(100, 150, 40);
                vCircle.graphics.endFill();
                addChild(vCircle);

                var rect:MyRect = new MyRect();
            }   
        }
    }



    // Second class "MyRect" (does not display)

    package dr {
    import flash.display.*;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.geom.*;

    import mx.core.*;

    public class MyRect extends UIComponent
    {
        public function MyRect()
        {   

            var vRect:Sprite = new Sprite();
            vRect.graphics.beginFill(0x0000ff, 1);
            vRect.graphics.drawRect(300, 150, 150, 75);
            addChild(vRect);

            //var ui:UIComponent = new UIComponent();
            //addChild(ui);
            //ui.addChild(vRect);
            //UpdateDisplayList();  
        }

    }   
}

    //Here is the MXML main file:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx"
                   xmlns:dr="dr.*"
                   minWidth="955" minHeight="600">
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <mx:Panel id="myPanel" width="700" height="600" paddingLeft="10" paddingTop="10">   
                <dr:Ball></dr:Ball>
        </mx:Panel>
    </s:Application>

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

В вашем классе Ball вы создаете новый класс MyRect; однако, вы не добавите его на сцену:

var rect:MyRect = new MyRect();
addChild(rect);
0 голосов
/ 16 декабря 2011

vRect.graphics.endFill(); отсутствует.

...