2014-05-20 3 views
1

OK 그래서 파이 차트를 생성 코드 ... 권장플래시 AS3 : 현재 프레임에 따라 변경 변수

package { 
import flash.display.Sprite; 
import flash.display.MovieClip; 

public class App extends MovieClip { 
    function App() { 
     this.graphics.lineStyle(3, 0xFF0000); 
     this.graphics.beginFill(0xFF0000, 0.5); 
     this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, -90, 0); 
     this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, 0, 110); 
     this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, 110, 180); 
     this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, 180, 270); 
     this.graphics.endFill(); 
    } 


var piesize:Number = 140; 

    var wedge1:Number = 90; 
    var wedge2:Number = 110; 
    var wedge3:Number = 90; 
    var wedge4:Number = 90; 


    /** 
    * Draw a segment of a circle 
    * @param target <Sprite> The object we want to draw into 
    * @param x   <Number> The x-coordinate of the origin of the segment 
    * @param y   <Number> The y-coordinate of the origin of the segment 
    * @param r   <Number> The radius of the segment 
    * @param aStart <Number> The starting angle (degrees) of the segment (0 = East) 
    * @param aEnd  <Number> The ending angle (degrees) of the segment (0 = East) 
    * @param step  <Number=1> The number of degrees between each point on the segment's circumference 
    */ 
    function drawSegment(target:Sprite, x:Number, y:Number, r:Number, aStart:Number, aEnd:Number, step:Number = 1):void { 
      // More efficient to work in radians 
      var degreesPerRadian:Number = Math.PI/180; 
      aStart *= degreesPerRadian; 
      aEnd *= degreesPerRadian; 
      step *= degreesPerRadian; 

      // Draw the segment 
      target.graphics.moveTo(x, y); 
      for (var theta:Number = aStart; theta < aEnd; theta += Math.min(step, aEnd - theta)) { 
       target.graphics.lineTo(x + r * Math.cos(theta), y + r * Math.sin(theta)); 
      } 
      target.graphics.lineTo(x + r * Math.cos(aEnd), y + r * Math.sin(aEnd)); 
      target.graphics.lineTo(x, y); 
    }; 
} 
} 

이 코드는 외부 AS 파일에서 가져온되어 있습니다. 그건 잘 작동하고, 4 세그먼트와 사랑스러운 빨간 원형 차트를 만듭니다.

wedge1, wedge2 등의 변수를 볼 수 있습니다. 현재 주 타임 라인의 각 프레임에서 변수를 변경할 수 있기를 원하지만 현재 아무 것도하지 않습니다.

프레임 사이를 이동할 때 파이 차트의 변수를 변경하는 방식으로 기본 타임 라인에 이러한 변수를 두는 방법이 있습니까? (나는 왼쪽과 오른쪽 키를 사용하여 한 번에 한 프레임 씩 앞뒤로 이동합니다.)

또한이 코드를 어떻게 든 변경해야합니다 ... 나는 SUDO 스타일로 작성했지만 이 코드의 정확한 실행에 어떤 도움을 크게 나는 기본적으로 내가 앞으로 또는 뒤로 통해 이동 원형 차트 세그먼트 및 크기 변화를 달성하기 위해 노력하고있어,

wedge1start == -90 
wedge1end == wedge1start + wedge1 
wedge2end == wedge1end + wedge2 
wedge3end == wedge2end + wedge3 
wedge4end == wedge2end + wedge4 


this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, wedge1start, wedge1end); 
this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, wedge1end, wedge2end); 
this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, wedge2end, wedge3end); 
this.drawSegment(this, stage.stageWidth/2, stage.stageHeight/2, piesize, wedge3end, wedge4end); 

나는이 말이 희망 ... 감사하겠습니다 시간. 변수가 존재하지만 AS 파일 외부에서 변수를 변경할 수없는 것 같습니다.

프레임에 무엇인가를 입력해야합니까 ?? 당신이 게시 클래스를 가정 긴 질문

답변

0

에 대한 도움을

감사합니다, 죄송 문서 클래스입니다, 당신이 할 필요가 public 당신의 변수를 만들 수 있습니다 : 주에 그런

public var wedge1:Number = 0; 

타임 라인에서 의사 코드처럼 이름으로 액세스 할 수 있습니다.

+0

감사합니다. 이제 실제로 애니메이션의 두 번째 및 네 번째 프레임에서 변수가 변경되었습니다. 그러나 내가 누락 된 것은 프레임을 입력 할 때 파이가 만들어지는 것입니다. 나는 'function App'주위에 ENTER_FRAME 리스너를 추가하려고했지만, 뭔가 또는 다른 것이 정의되지 않았기 때문에 에러가 발생할 때마다. 무대가 정의되어 있지는 않지만 무언가를 정의하거나 뭔가를 정의하는 방법을 이해하지 못한다. 붙어 있어요 – bboybeatle

+0

무언가가 표시 목록에 추가되면 스테이지가 자동으로 정의됩니다. 당신은'Event.ADDED_TO_STAGE' 이벤트로 그것을들을 수 있습니다. 그래도 문제가 계속된다면 내일 도울 수 있습니다. – BadFeelingAboutThis

+0

좋아요. 그래서 파이 차트가 모든 프레임에 그려 지도록했습니다. 그래서 'piesize'가 그것의 크기에 영향을줍니다. 내가 깨닫지 못한 것은 그 스프라이트가 사라져서 원형 차트가 수백 개씩 서로 겹쳐져 이상한 결과를 만들어내는 것입니다. 이제는 다시로드하기 전에 파이 차트를 제거하는 방법을 알아야합니다. 내 길을 거기에 ... 만약 당신이 나를 놀라게 될 내일 도울 수 있다면, 나는 당신의 시간을 지불하는 데 아무런 문제가 없습니다. 나는 지금 너에게 메세지를 보낼 것이다. 감사합니다 – bboybeatle