2008-10-02 6 views
0

flash.display.Sprite를 확장하고 낮은 수준의 DisplayObjects (Sprite'a, Shape 's, TextField)의 계층 구조를 사용하는 ActionScript 3 시각화에서 여러 스크롤 영역을 만드는 가장 좋은 방법은 무엇입니까? ?ActionScript 3.0에서 스크롤 할 수있는 영역 시각화

주 스프라이트의 자식으로 추가 된 세 개의 mx.containers.Canvas 객체를 사용하려고 시도했으며 주 스프라이트를 캔버스로 변환하려고했지만 두 방법 중 하나를 사용하여 표시 할 수 없습니다. 또한 Canvas.addChild와 Canvas.rawChildren.addChild를 사용하여 DisplayObject를 추가하려고 시도했습니다.

mx. * 구성 요소를 사용하기 위해 전체 내용을 다시 작성해야 할 필요가 있습니까? 아니면 Canvas 객체 안에 더 많은 기본 객체를 표시하는 트릭이 있습니까?

다음은 스프라이트를 사용하는 방식에 대한 샘플 코드입니다. 우리는 _colSprite, _rowSprite 및 _mapSprite를 연결된 스크롤 막대와 함께 만들려합니다. Canvas 객체로 변환 할 때 표시 객체가 표시되기 전에 코드가 자동으로 멈 춥니 다 (올바르게 호출하면 addChild 행에 있음).

다음은 코드의 발췌 부분입니다. 이것은 스프라이트를 확장하는 단일 actionscript 클래스의 모든 것입니다. 당신이 Canvas.invalidateSize()을 (에 호출 할 필요가 있습니다

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



     } 

    } 
+0

verticalScrollPolicy가 'off'가 아닌 경우 Canvas가 자동으로 스크롤 막대를 표시해야합니다. 무슨 일이 일어나고 있는지 더 많은 아이디어를주기 위해 게시 할 수있는 코드가 있습니까? –

+0

순수 AS3 또는 MXML + AS3에서이 글을 쓰고 있습니까? FlexBuilder를 IDE 또는 다른 용도로 사용하고 있습니까? 또한 Max Stewart가 말했듯이 코드 예제를 게시하십시오. – defmeta

답변

1

각 캔버스에 아이를 추가 한 후 :

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

샘플 드로잉 기능을 : 세 지역을 최저치를

내가 스크롤 할 각각 하나씩) 크기 조정을 다시 수행하도록합니다.

이 작업을 수행하려면 구성 요소 라이프 사이클의 어느 단계 (예 : '_drawColumLabels')를 추가하는지에 따라 달라집니다.

표시 영역에 표시 할 수있는 것보다 많은 레이블이 _colSprite (및 _rowSprite)에 표시되기를 원한다고 가정합니까? 이 경우 스프라이트 이외의 다른 것을 사용해야 할 것입니다. 스프라이트처럼 캔버스는 스크롤을 지원하지 않습니다.

각 구성 요소의 x/y/너비/높이 값을 디버그하여 예상 한대로 구성 할 수도 있습니다. 레이아웃을 수행하는 데 유용한 정보는 용지에 레이아웃을 그리고 시작하는 것입니다. 크기와 좌표를 써서 계산이 옳다는 것을 알 수 있습니다.

관련 문제