Frage

Was ist der beste Weg, um mehrere scrollierbare Regionen in einer ActionScript 3 -Visualisierung zu erstellen, die Flash.Display.sprite erweitert und die Hierarchie von Displays auf niedriger Ebene (Sprite'a, Form, Textfield) verwendet?

Ich habe versucht, drei MX.Container zu verwenden. Ich habe auch versucht, meine DisplayObjects mit sowohl canvas.addchild und canvas.rawchildren.addchild hinzuzufügen.

Ist es notwendig/möglich, das Ganze neu zu schreiben, um MX zu verwenden.

Hier ist ein Beispielcode für die Art und Weise, die mit Sprites funktioniert. Wir möchten _colsprite, _rowsprite und _mapsprite sroll mit verknüpften Scroll -Balken herstellen. Wenn ich sie in Canvas -Objekte konvertiere, hängt der Code lautlos, bevor alle Anzeigeobjekte gezogen werden (in den Addchild -Zeilen, wenn ich mich richtig erinnere).

Unten ist ein Auszug des Codes. Dies ist alles aus einer einzigen ActionScript -Klasse, die Sprite erweitert.

Richten Sie drei Regionen ein, die ich scrollen möchte:

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

Beispielzeichnungsfunktion:

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



        }

    }
War es hilfreich?

Lösung

Nach dem Hinzufügen der Kinder zu jeder Leinwand müssen Sie möglicherweise Canvas aufrufen.

Wenn Sie dies tun müssen, hängt Sie davon ab, welche Phase im Komponentenlebenszyklus die Kinder hinzufügen - dh wenn Sie "_drawcolumLabels" nennen.

Ich nehme an, Sie möchten, dass eine Scollbar auf _colsprite (und _rowsprite) erscheinen, wenn mehr Etiketten darin enthalten sind, als in seinem sichtbaren Bereich angezeigt werden können? Wenn dies der Fall ist, müssen Sie etwas anderes als Sprite verwenden, wie Leinwand, da Sprite nicht das Scrollen unterstützt.

Möglicherweise möchten Sie auch die X/Y/Breiten-/Höhenwerte aller Ihrer Komponenten debuggen, um sicherzustellen Damit ich sehen kann, dass meine Berechnungen richtig sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top