Question

Quel est le meilleur moyen de créer plusieurs régions défilables dans une visualisation ActionScript 3 qui étend flash.display.Sprite et utilise la hiérarchie des objets DisplayObjects de bas niveau (Sprite'a, Shape's, TextField)?

J'ai essayé d'utiliser trois objets mx.containers.Canvas ajoutés en tant qu'enfants du Sprite principal et j'ai également essayé de convertir le Sprite principal en canevas, mais je ne parviens pas à afficher quoi que ce soit avec l'une ou l'autre méthode. J'ai également essayé d'ajouter mes objets d'affichage à l'aide de Canvas.addChild et de Canvas.rawChildren.addChild.

Est-il nécessaire / possible de réécrire le tout pour utiliser les composants mx. * ou existe-t-il une astuce pour afficher des objets plus primitifs à l'intérieur d'un objet Canvas?

Voici un exemple de code décrivant la manière dont fonctionne une image-objet. Nous aimerions créer _colSprite, _rowSprite et _mapSprite avec des barres de défilement liées. Lorsque je les convertis en objets Canvas, le code est suspendu silencieusement avant que des objets d'affichage ne soient dessinés (aux lignes addChild si je me souviens correctement).

Ci-dessous, un extrait du code. Tout cela provient d'une seule classe ActionScript qui étend le sprite.

Configuration de trois régions dans lesquelles je souhaite faire défiler:

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

Exemple de fonction de dessin:

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



        }

    }
Était-ce utile?

La solution

Après avoir ajouté les enfants à chaque canevas, vous devrez peut-être appeler Canvas.invalidateSize () (sur chacun d'entre eux) pour qu'ils recalculent leur taille.

Cela dépend de l'étape à laquelle vous ajoutez les enfants dans le cycle de vie des composants - c'est-à-dire lorsque vous appelez '_drawColumLabels'.

Je suppose que vous souhaitez qu'une barre de défilement apparaisse sur _colSprite (et _rowSprite) s'il contient plus d'étiquettes que ce qui peut être affiché dans sa zone visible? Si tel est le cas, vous devrez utiliser autre chose que Sprite, comme Canvas car Sprite ne prend pas en charge le défilement.

Vous pouvez également déboguer les valeurs x / y / largeur / hauteur de chacun de vos composants pour vous assurer qu'ils correspondent à ce que vous attendez - quelque chose que je trouve utile dans la mise en page est de dessiner la mise en page sur papier et de commencer à écrire tailles et coordonnées afin que je puisse voir que mes calculs sont exacts.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top