문제

Flash.Display.sprite를 확장하고 낮은 레벨 DisplayObjects (Sprite'A, Shape 's, TextField)의 계층 구조를 사용하는 ActionScript 3 시각화에서 여러 스크롤 가능한 영역을 만드는 가장 좋은 방법은 무엇입니까?

메인 스프라이트의 어린이로 추가 된 3 개의 mx.containers.canvas 객체를 사용하려고 시도했으며 메인 스프라이트를 캔버스로 변환했지만 두 방법을 사용하여 아무것도 표시 할 수 없습니다. 또한 Canvas.addchild와 Canvas.rawchildren.addchild를 모두 사용하여 DisplayObjects를 추가하려고 시도했습니다.

MX를 사용하기 위해 모든 것을 다시 작성해야 할 필요가 있습니까?* 구성 요소 또는 Canvas 객체 내부에 더 많은 원시 객체를 표시하는 요령이 있습니까?

다음은 스프라이트를 사용하여 작동하는 방식에 대한 샘플 코드입니다. 링크 된 스크롤 막대와 함께 _colsprite, _rowsprite 및 _mapsprite sroll을 만들고 싶습니다. 캔버스 객체로 변환하면 디스플레이 객체가 그려지기 전에 코드가 조용히 매달려 있습니다 (올바르게 기억하는 경우 AddChild 라인에서).

아래는 코드의 발췌문입니다. 이것은 모두 스프라이트를 확장하는 단일 액션 스크립트 클래스에서 나온 것입니다.

스크롤하려는 3 개의 영역을 설정합니다.

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



        }

    }
도움이 되었습니까?

해결책

각 캔버스에 어린이를 추가 한 후에는 캔버스를 호출해야 할 수도 있습니다.

이를 수행 해야하는 것은 어린이를 추가하는 구성 요소 수명주기의 어느 단계에 달려 있습니다. 즉 '_DrawColumlabels'라고 부를 때

나는 당신이 가시 영역에 표시 될 수있는 것보다 더 많은 레이블이있는 경우 _colsprite (및 _rowsprite)에 Scollbar가 나타나기를 원한다고 가정합니까? 이 경우 Sprite가 스크롤링을 지원하지 않기 때문에 Sprite 이외의 다른 것을 사용해야합니다.

또한 각 구성 요소의 x/y/너비/높이 값을 디버깅하여 기대할 수 있는지 확인할 수도 있습니다. 레이아웃을 수행하는 데 도움이되는 것은 종이에 레이아웃을 그리고 크기 및 좌표를 작성하는 것입니다. 내 계산이 옳다는 것을 알 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top