Прокручиваемые области в визуализации ActionScript 3 - PullRequest
0 голосов
/ 02 октября 2008

Каков наилучший способ создания нескольких прокручиваемых областей в визуализации ActionScript 3, которая расширяет flash.display.Sprite и использует иерархию низкоуровневых объектов DisplayObject (Sprite'a, Shape's, TextField)?

Я пытался использовать три объекта mx.containers.Canvas, добавленных в качестве дочерних элементов основного Sprite, а также пытался преобразовать основной Sprite в Canvas, но не могу получить что-либо для отображения с использованием любого из этих методов. Я также попытался добавить свои объекты DisplayObject, используя как Canvas.addChild, так и Canvas.rawChildren.addChild.

Необходимо / возможно ли переписать все это для использования компонентов mx. * Или есть хитрость для отображения большего количества примитивных объектов внутри объекта Canvas?

Вот пример кода для работы с использованием спрайтов. Мы хотели бы сделать прокрутку _colSprite, _rowSprite и _mapSprite со связанными полосами прокрутки. Когда я конвертирую их в объекты Canvas, код беззвучно зависает перед отрисовкой экранных объектов (в строках addChild, если я правильно помню).

Ниже приведен фрагмент кода. Это все из одного класса ActionScript, который расширяет спрайт.

Настройка трех областей, которые я хочу прокрутить:

this._log("Creating Sprites"); 

                this._colSprite = new Sprite();

                this._colSprite.y=0;

                this._colSprite.x=this._rowLabelWidth + this._rowLabelRightPadding + this._horizontalPadding;


this._rowSprite = new Sprite();

                this._rowSprite.y=this._columnLabelHeight+this._columnLabelBottomPadding + this._verticalPadding;

                this._rowSprite.x=this._horizontalPadding;




                this._mapSprite = new Sprite();

                this._mapSprite.y=this._columnLabelHeight+this._columnLabelBottomPadding+ this._verticalPadding;

                this._mapSprite.x=this._rowLabelWidth + this._rowLabelRightPadding+this._horizontalPadding;


                    this._log("adding kids"); 

addChild(this._mapSprite);

addChild(this._rowSprite);

addChild(this._colSprite);

Пример функции рисования:

 private function _drawColumLabels(colStartIndex: int): void {

        for (var col : int = colStartIndex; col < myData.g.length; col++) {

            var colName : String = this.myData.g[col].label;

            var bottomLeftPoint : Object = this._getCellXYTopLeft(0, col);

            bottomLeftPoint.y = this._columnLabelHeight + this._verticalPadding;

            var centerX : int = Math.round(this._cellWidth / 2 + (this._fontHeight / 2) - 1);



            var colLabel : TextField = new TextField();

                colLabel.defaultTextFormat = this._labelTextFormat;

                colLabel.width = this._columnLabelHeight+this._columnLabelBottomPadding;

                colLabel.text = colName;                

                colLabel.embedFonts = true;





                var colSprite : Sprite = new Sprite();

                colSprite.addChild(colLabel);

                colSprite.x = bottomLeftPoint.x;

                colSprite.y = bottomLeftPoint.y;



                colSprite.rotation = -45;



                this._colSprite.addChild(colSprite);



        }

    }

1 Ответ

1 голос
/ 02 октября 2008

После добавления дочерних элементов в каждый Canvas вам может потребоваться вызвать Canvas.invalidateSize () (для каждого), чтобы заставить их пересчитать размер.

Необходимость сделать это зависит от того, на какой стадии в жизненном цикле компонента вы добавляете дочерних элементов, т.е. когда вы вызываете '_drawColumLabels'.

Полагаю, вы хотите, чтобы на _colSprite (и _rowSprite) появилась полоса прокрутки, если в ней больше меток, чем можно отобразить в видимой области? Если это так, вам нужно использовать что-то кроме Sprite, например Canvas, так как Sprite не поддерживает прокрутку.

Возможно, вы также захотите отладить значения x / y / width / height каждого из ваших компонентов, чтобы убедиться, что они соответствуют вашим ожиданиям. Что мне помогает при создании макета, так это нарисовать макет на бумаге и начать писать размеры и координаты, чтобы я мог видеть, что мои расчеты верны.

...