2016-07-19 2 views
0
for (int i = 0; i < 50; i++){ 
     noStroke(); 
     fill(50,50,50); 
     rect(0,0,100,100,i); 
     System.out.println(i); 
     delay(100); 
    } 

이것은 for 루프이며 0에서 50까지 숫자를 쓰고 직사각형을 그립니다. 목표는 모서리에 반경이 증가하는 직사각형을 그릴 수있게하는 것입니다. rect()는 수행하지 않지만 System.out.println();은 수행합니다. 이것은 java 처리로 작성됩니다.이 for 루프는 직사각형을 그리지 않지만 콘솔에 쓸 것입니다.

+5

당신이 연결이 끊긴 조각 대신 [mcve]을 제공시겠습니까? –

+0

채우기 색 때문에 반지름의 차이를 식별 할 수 없기 때문일 수 있습니까? –

+0

'공공 무효 설치() { \t} \t \t 공공 무효의 설정() { \t \t 크기 (800600); \t} \t 공개 무효 연신() { \t \t 찾는 (나는이 <50, I = 0 int로 난 ++) { \t \t \t 스트로크 (100,0,0); \t \t \t fill (50,50,50); \t \t \t rect (0,0,100,100, i); \t \t \t System.out.println (i); \t \t \t 지연 (100); \t \t} \t} '이렇게 변경했는데 예상대로 작동하지 않고 루프를 완료 할 때 하나의 사각형 만 그립니다. –

답변

2

delay() 함수를 사용하여 애니메이션을 만들지 마십시오.

draw() 기능이 완료 될 때까지 (또는 코드가 끝날 때까지 draw() 기능을 사용하지 않는 경우) 아무 것도 화면에 표시되지 않습니다. 모든 것은 화면에 보이지 않는 버퍼로 그려지고, draw() 함수가 끝나면 버퍼는 한 번에 모두 화면에 그려집니다.

그래서 실제로는 오프 스크린 버퍼에 직사각형을 그리고 100 밀리 초를 기다리고 또 다른 사각형을 오프 스크린 버퍼에 그리고 100 밀리 초를 기다리고 또 다른 직사각형을 그립니다. 대기중인 모든 작업이 완료 될 때까지 화면에 아무 것도 실제로 볼 수 없습니다.

애니메이션을 만들려면 루프를 사용하지 마십시오. 대신 draw() 함수를 사용하여 증가하는 스케치 수준 변수 (또는 미리 정의 된 frameCount 변수 사용)를 사용하십시오.

또 다른 문제는 동일한 색상 사각형을 반복해서 그리는 것입니다. 회색 직사각형을 그린 다음 약간 더 작은 회색 직사각형을 그 위에 놓은 다음 약간 더 작은 직사각형을 그립니다. 그래서 당신이 그리는 첫 번째 사각형과 조화를 이루기 때문에 더 작은 사각형을 실제로 보지 못할 것입니다.

실행 더 나은에 무슨 일이 일어나고 있는지 이해하기 위해이 프로그램 :

noStroke(); 
fill(50,50,50); 
rect(0,0,100,100,0); 
fill(255, 0, 0); 
rect(0,0,100,100,10); 
fill(0, 255, 0); 
rect(0,0,100,100,20); 
+0

감사합니다. draw() 함수가 그렇게 작동한다는 것을 알지 못했습니다. –

+0

@ByronLathi 문제 없습니다. Processing은 '이중 버퍼링'(https://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics)이라는 것을 사용하기 때문에 'draw()'함수는 이런 식으로 작동합니다. 이는 깜박 거림이나 찢어짐과 같은 문제를 예방하는 데 도움이됩니다. 이 방법으로 작동하지 않는다면 상황이 꽤 추울 것입니다! –

+0

매우 유익합니다. – user2277872

관련 문제