Ошибка проекта Flex ActionScript в объявлении объекта. (Файл project.mxml) - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть приложение Flex ActionScript, мне нужно нарисовать простой прямоугольник на сцене. я использую firstapp.mxml и другой класс под названием Book.as;

вот полный код, который я сделал.

firstapp.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute">

    <mx:Script>
        <![CDATA[
            import com.books.Book;
            import flash.display.*;

            var n:Book = new Book;
            //n.var1 = "Another String";
            addChild(n);
        ]]>
    </mx:Script>

</mx:Application>

Book.as

package com.books
{
    import flash.display.*;

    public class Book extends Sprite
    {
        public var var1:String = "Test Var";
        public var var2:Number = 1000;

        public function Book()
        {

            var b = new Sprite;
            b.graphics.beginFill(0xFF0000, 1);
            b.graphics.drawRect(0, 0, 500, 200);
            b.graphics.endFill();
            addChild(b);
        }

    }
}

Я новичок во Flex, поэтому, пожалуйста, помогите мне исправить это. Я хочу показать прямоугольник.

Ответы [ 3 ]

1 голос
/ 16 ноября 2010

USE var n: Book = new Book () ;вместо var n: Book = new Book;

1 голос
/ 16 ноября 2010

Поскольку вы пытаетесь добавить это к гибкому компоненту, вам, вероятно, нужно обернуть Book в экземпляр UIComponent:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute">

    <mx:Script>
        <![CDATA[
            import com.books.Book;
            import flash.display.*;

            var n:UIComponent = new UIComponent;
            n.addChild(new Book);
            addChild(n);
        ]]>
    </mx:Script>

</mx:Application>

Другим способом сделать это было бы сделать так, чтобы Book наследовал UIComponent, вот так:

package com.books
{
    import flash.display.*;

    public class Book extends UIComponent
    {
        public var var1:String = "Test Var";
        public var var2:Number = 1000;

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            graphics.beginFill(0xff0000, 1);
            graphics.drawRect(0, 0, 500, 200);
            graphics.endfill();
        }
    }
}

Затем вы можете добавить Book прямо в ваше приложение, например:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:books="com.books.*"
    layout="absolute">

    <books:Book />

</mx:Application>

Кроме того, я предлагаю вам ознакомиться с архитектурой компонентов Flex. Существует довольно хорошая документация от Adobe по этому вопросу, но вы должны знать, что эта информация относится к Flex 3 (я заметил, что вы используете Flex 3, поэтому ссылка). Даже при том, что большая часть информации все еще может быть применима к Flex 4 (например, жизненный цикл компонента), существуют различия, особенно в отношении скинов.

0 голосов
/ 16 ноября 2010
Мак

показал вам хороший путь. Но если вы хотите просто показать что-то быстро, измените

addChild(b);

до

rawChildren.addChild(b);

Редактировать: Некоторые пояснения: приложение является UIComponent, поэтому его метод addChild нуждается в UIComponent. Вы хотите добавить Sprite. Это можно сделать с помощью метода rawChildren.addChild из приложения. rawChildren полезен для работы спрайтов с UIComponents, но вы должны сами управлять спрайтами (размерами и компоновкой).

...