Пытаясь выучить Actionscript / Flex, пытаясь нарисовать поле без mxml - PullRequest
0 голосов
/ 14 августа 2010

Хорошо, я пытаюсь нарисовать коробку с actioncript 3 и flex 3.5.Сначала несколько вещей:

1) Я вообще не использую IDE, просто блокнот и flex 2) Я вообще не использую mxml-файл (да, это возможно с as3, очевидно) 3) Яне использует наследование, т.е. я не использую расширения в моих классах, я пытаюсь заставить этот конкретный фрагмент кода работать только через композицию

В любом случае это сам код (имя файла MAIN.as):

package 
{
    import flash.display.*;     
    import mx.core.Application;     
    import flash.events.*;      
    import mx.collections.*;
    import flash.geom.*;        
    import mx.controls.*;
    import flash.text.*;        
    import mx.events.*;
    import mx.styles.*;

    public class MAIN
    {
        public var APPLICATION:Application = Application(Application.application);
        public function MAIN()
        {
            APPLICATION.layout = 'absolute';
            var BOX:Sprite = new Sprite();
            BOX.graphics.beginFill(0xFF0000,1);
            BOX.graphics.drawRect(0,0,400,400);
            BOX.graphics.endFill();
            APPLICATION.addChild(BOX);
        }
    }
}

Компилируется просто отлично, но ничего не отображается.Я должен увидеть красное поле, но сейчас я вижу только пустой экран.Я заставил это работать, используя класс MAIN extends Sprite и затем все вместе избавляясь от переменной box, но опять же я хочу избегать использования команды extends.Извините, что импорт стал немного постыдным, но на самом деле он не имеет отношения к проблеме, поэтому он не имеет большого значения.

Ответы [ 3 ]

0 голосов
/ 14 августа 2010

Я думаю, вы должны расширять Sprite, если это ваш основной класс.

Во-вторых, я не эксперт по Flex, но я думаю, что вы не сможете использовать большинство классов Flex, если не правильно инициализировали среду. Я всегда видел, как это делается с помощью mxml. Возможно, есть способ сделать это, используя только Actionscript, но я не вижу в этом смысла. Если вы хотите использовать приложение и другие компоненты Flex, сделайте точку входа mxml-файлом. В противном случае, просто используйте чистый Actionscript.

PS: Просто прочитайте, что вы уже поняли, что ваш код работает над расширением Sprite. Но какими бы ни были ваши предпочтения в отношении наследования или компоновки, чтобы ваш ящик был виден, он должен быть в какой-то момент присоединен к списку отображения. Итак, у вас есть Спрайт и вы к нему потянули. Но вам все равно нужно добавить его в список отображения, чтобы увидеть его. Чтобы добавить экранный объект в список отображения, вам нужна ссылка на некоторый контейнер экранного объекта. Если вы расширите Sprite, ваш класс будет 1) контейнером и 2) будет прикреплен к списку отображения. Ваш основной класс должен быть, по крайней мере, Sprite. Думаю, у тебя нет особого выбора.

0 голосов
/ 14 августа 2010

Класс документа - это ваша точка входа для ActionScript на сцену.Экземпляр вашего объекта класса документа присутствует и может быть представлен как свойство «root» любого объекта, также включенного в список отображения.Корневое свойство класса DisplayObject должно возвращать DisplayObject, определяемый как:

Для экранного объекта в загруженном SWF-файле корневое свойство является самым верхним экранным объектом в части экранадревовидная структура списка, представленная этим SWF-файлом.

Следовательно, класс вашего документа должен быть DisplayObject для того, чтобы что-либо отображалось на сцене, независимо от желания использовать композицию.

Относительно компонентов Flex нет необходимости ссылаться на mx.core.Application или любые другие компоненты Halo, если ваш основной файл AS выходит из DisplayObject (Sprite, в основном, MovieClip, не используется, если вы не задействуете объектиз Flash CS * Professional, содержащей временную шкалу, на которую нужно ссылаться в кадрах), вы все равно можете создать BOX: Sprite и добавить его в список отображения класса документа

this.addChild (BOX);

И все будет работать.

0 голосов
/ 14 августа 2010

Компоненты Flex (такие как «Приложение», «Список», «Холст» и т. Д.) Могут добавлять другие компоненты Flex только в качестве дочерних при использовании addChild.Если вы хотите добавить необработанный примитив AS3, такой как Shape, Sprite, Movieclip, вам нужно сделать [FLEX COMPONENT HERE].rawChildren.addChild(BOX); или в вашем случае APPLICATION.rawChildren.addChild(BOX);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...