Pregunta

¿Cuál es la mejor manera de crear varias regiones desplazables en una visualización de ActionScript 3 que amplíe flash.display.Sprite y haga uso de la jerarquía de DisplayObjects de bajo nivel (Sprite'a, Shape's, TextField)?

He intentado usar tres objetos mx.containers.Canvas agregados como hijos del Sprite principal y también he intentado convertir el Sprite principal en un Canvas, pero no puedo lograr que aparezca nada usando cualquiera de los dos métodos. También he intentado agregar mis DisplayObjects usando Canvas.addChild y Canvas.rawChildren.addChild.

¿Es necesario / posible reescribir todo para usar los componentes mx. * o hay un truco para mostrar más objetos primitivos dentro de un objeto Canvas?

Aquí hay un ejemplo de código para la forma en que funciona usando sprites. Nos gustaría hacer que _colSprite, _rowSprite y _mapSprite se enrolle con barras de desplazamiento vinculadas. Cuando los convierto en objetos Canvas, el código se cuelga en silencio antes de dibujar los objetos de visualización (en las líneas addChild si recuerdo correctamente).

A continuación se muestra un extracto del código. Todo esto es de una sola clase de ActionScript que extiende sprite.

Configurar tres regiones que deseo desplazar:

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);

Función de dibujo de muestra:

 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);



        }

    }
¿Fue útil?

Solución

Después de agregar los elementos secundarios a cada Canvas, es posible que necesites llamar a Canvas.invalidateSize () (en cada uno) para que recalculan su tamaño.

La necesidad de hacer esto depende de la etapa en el Ciclo de vida de los componentes que está agregando a los hijos, es decir, cuando llama a '_drawColumLabels'.

¿Supongo que desea que aparezca una barra de desplazamiento en _colSprite (y _rowSprite) si hay más etiquetas de las que se pueden mostrar en su área visible? Si este es el caso, deberás usar algo que no sea Sprite, como Canvas ya que Sprite no admite el desplazamiento.

También es posible que desee depurar los valores de x / y / ancho / alto de cada uno de sus componentes para asegurarse de que sean lo que espera, algo que me parece útil para hacer el diseño es dibujar el diseño en papel y comenzar a escribir. Tamaños y coordenadas para que pueda ver que mis cálculos son correctos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top