2012-07-21 1 views
1

그래서이 특정 세트에서 작업이 끝나기 시작했습니다. 타원은 타이머가 틱 할 때마다 그려집니다. 타이머는 기본적으로 활성화되어 있으며 각 타이머 틱의 간격은 100ms입니다. 디버깅을 실행하면 하나의 타원이 캔버스에 그려집니다. 더 이상은 아닙니다. 이미 for 루프와 while 루프를 시도하여 각 타이머 틱에서 임의의 양의 타원을 그릴 수는 있지만 작동하지 않습니다. . 이상적으로는 타이머를 켜고 끄는 버튼을 만들려고합니다. (해결 방법은 이전 문제 덕분에이 작업을 수행하는 방법에 대한 몇 가지 아이디어가 있습니다.) 먼저 타이머 코드를 얻고 싶습니다. 아래 코드는 지금까지 얻을 관리해야한다 : 아마 하나 또는 두 개의 중요한 것을 놓치고각 타이머 틱에 임의의 너비, 높이, x 위치 및 y 위치가있는 타원을 그립니다. (Visual C++)

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) 
     { 
      Random^ rGen; 
      timer1->Enabled = true; 

      Graphics^ mainCanvas = CreateGraphics(); 

      // while loop to set upper limit for no# of ellipses 
      // note: this is just for testing - would like to have 
      // ellipses drawn automatically at random etc. 
      int i = 0; 
      while(i < 20) 
      { 
      rGen = gcnew Random(); 
      Brush^ greenBrush = gcnew SolidBrush(Color::Green); 
      static int randX = rGen->Next(Width); //random x co-ordinate 
      static int randY = rGen->Next(Height); //random y co-ordinate 
      static int randWidth = rGen->Next(100); //random ellipse width 
      static int randHeight = rGen->Next(100); //random ellipse height 
      mainCanvas->FillEllipse(greenBrush, randX,randY,randWidth,randHeight); 
      i++; 
      } 
     } 

, 나는 또한 나의 머리가 거의 폭발하는 동시에 C# 및 ASP.NET을 배우고있다 너무 많이 쌓여있다. 어떤 도움을 주셔서 감사합니다 :).

+0

얼마만큼의 타원을 그리시겠습니까? while 루프에서 동일한 타원을 20 번 그립니다. 좌표를 변경하려면 무작위 생성을 루프 내에 두십시오. 또한 생성자 또는 무언가와 같이 전역에 임의의 무작위를 만들려고 할 수 있습니다. 동일한 시드를 사용하여 동일한 무작위를 만들 수 있으므로 타이머 틱마다 X, Y에 대해 동일한 결과를 줄 수 있습니다. – Blablablaster

+0

@Blablablaster이 스레드에서 코드를 업데이트했지만 여전히 동일한 결과를 생성합니다 ... – Rob

답변

2
static int randX = rGen->Next(Width); 

정적 키워드는 여기 천적이다. 로컬 변수 앞에 사용되면 번만 초기화됩니다. 따라서 여러분은 똑같은 타원 만 그립니다. 디버거 btw를 사용하면 쉽게 볼 수 있습니다.

0

잠깐만 요,이 방법 밖에있는 타이머를 사용하도록 설정했는지 확인하십시오. 이미 완료했지만 여기서 볼 수는 없으므로 실제로 메서드를 입력 할 수 있습니다. @ 한스가 말했듯이, 통계를 제거하십시오.

관련 문제