Domanda

Qual è il modo migliore per creare diverse aree scorrevoli in una visualizzazione ActionScript 3 che estende flash.display.Sprite e fa uso della gerarchia di oggetti DisplayO di basso livello (Sprite'a, Shape's, TextField)?

Ho provato a usare tre oggetti mx.containers.Canvas aggiunti come figli dello Sprite principale e ho anche provato a convertire lo Sprite principale in Canvas ma non sono riuscito a ottenere nulla da mostrare usando nessuno dei due metodi. Ho anche provato ad aggiungere DisplayObjects usando sia Canvas.addChild che Canvas.rawChildren.addChild.

È necessario / possibile riscrivere il tutto per usare i componenti mx. * o c'è un trucco per visualizzare più oggetti primitivi all'interno di un oggetto Canvas?

Ecco un codice di esempio per il modo in cui funziona usando gli sprite. Vorremmo fare _colSprite, _rowSprite e _mapSprite sroll con barre di scorrimento collegate. Quando li converto in oggetti Canvas, il codice si blocca silenziosamente prima che vengano disegnati eventuali oggetti di visualizzazione (nelle righe addChild se ricordo bene).

Di seguito è riportato un estratto del codice. Questo è tutto da una singola classe ActionScript che estende lo sprite.

Impostazione di tre regioni che desidero scorrere:

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

Funzione di disegno di esempio:

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



        }

    }
È stato utile?

Soluzione

Dopo aver aggiunto i figli a ciascuna tela, potrebbe essere necessario chiamare Canvas.invalidateSize () (su ciascuna) per farli ricalcolare il loro dimensionamento.

La necessità di farlo dipende da quale fase del ciclo di vita dei componenti si stanno aggiungendo i figli, ovvero quando si chiama "_drawColumLabels".

Suppongo che desideri che una barra di scorrimento appaia su _colSprite (e _rowSprite) se ci sono più etichette di quante possano essere visualizzate nella sua area visibile? In tal caso, dovrai utilizzare qualcosa di diverso da Sprite, ad esempio Canvas poiché Sprite non supporta lo scorrimento.

Puoi anche eseguire il debug dei valori x / y / larghezza / altezza di ciascuno dei tuoi componenti per assicurarti che siano quelli che ti aspetti: qualcosa che trovo utile nel fare il layout è disegnare il layout su carta e iniziare a scrivere dimensioni e coordinate in modo da poter vedere che i miei calcoli sono corretti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top