Каков наилучший способ создания нескольких прокручиваемых областей в визуализации 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);
}
}