내 궁극적 인 목표는 버퍼에 rect를 그리고 다른 버퍼에 버퍼를 복사하고 이후 draw(), copy 두 번째 버퍼가 첫 번째 버퍼로 돌아가고, 약간 작아지며, 그 위에 다시 그립니다.PGraphics는 주 문맥에 그려 질 때마다 지워지거나 얼려진 것처럼 보입니다
나는 여기서 무슨 일이 일어나고 있는지 완전히 이해하기가 어렵습니다.
첫째, 예상 1 시간으로 정확히 작동이 코드, (아무 무승부 루프) 고려 :
PGraphics canvas;
PGraphics buffer;
void setup(){
size(500, 500);
canvas = createGraphics(width, height);
buffer = createGraphics(canvas.width, canvas.height);
canvas.beginDraw();
canvas.background(255);
canvas.noFill();
canvas.stroke(0);
canvas.rect(100 + random(-50, 50), 100 + random(-50, 50), 350 + random(-50, 50), 350 + random(-50, 50));
canvas.endDraw();
buffer.beginDraw();
buffer.image(canvas, 0, 0);
buffer.endDraw();
canvas.beginDraw();
canvas.image(buffer, 100, 100, width-200, height-200);
canvas.endDraw();
image(canvas, 0, 0);
noLoop();
}
그것은 아주 바보 같은 예는,하지만이 개념은 소리임을 증명 : 나는 그릴을 canvas
, buffer
에 복사하고 buffer
을 canvas
으로 다시 축소 한 다음 주 컨텍스트로 출력하십시오.
하지만 추첨에서이 작업을 수행 할 때 발생하는 볼() 루프 : 여기
PGraphics canvas;
PGraphics buffer;
void setup(){
size(500, 500);
canvas = createGraphics(width, height);
buffer = createGraphics(canvas.width, canvas.height);
canvas.beginDraw();
canvas.background(255);
canvas.noFill();
canvas.stroke(0);
canvas.rect(100 + random(-50, 50), 100 + random(-50, 50), 350 + random(-50, 50), 350 + random(-50, 50));
canvas.endDraw();
buffer.beginDraw();
buffer.image(canvas, 0, 0);
buffer.endDraw();
}
void draw(){
canvas.beginDraw();
canvas.image(buffer, 0, 0);
canvas.rect(100 + random(-50, 50), 100 + random(-50, 50), 350 + random(-50, 50), 350 + random(-50, 50));
canvas.endDraw();
image(canvas, 0, 0);
buffer.beginDraw();
buffer.image(canvas, 0, 0);
buffer.endDraw();
}
, 일이 끝나는 무슨 일이() 설정에서 만든 원래 RECT 모든 프레임을 복사됩니다 있다는 것입니다 ~ canvas
. 그래서 효과는 움직이지 않는 rect와 프레임마다 그려지고 대체되는 두 번째 rect입니다.
더 이상해진다. 단순히 주요 상황에 그리는 image()
기능을 이동할 때 발생하는 시계 :
PGraphics canvas;
PGraphics buffer;
void setup(){
size(500, 500);
canvas = createGraphics(width, height);
buffer = createGraphics(canvas.width, canvas.height);
canvas.beginDraw();
canvas.background(255);
canvas.noFill();
canvas.stroke(0);
canvas.rect(100 + random(-50, 50), 100 + random(-50, 50), 350 + random(-50, 50), 350 + random(-50, 50));
canvas.endDraw();
buffer.beginDraw();
buffer.image(canvas, 0, 0);
buffer.endDraw();
}
void draw(){
canvas.beginDraw();
canvas.image(buffer, 0, 0);
canvas.rect(100 + random(-50, 50), 100 + random(-50, 50), 350 + random(-50, 50), 350 + random(-50, 50));
canvas.endDraw();
buffer.beginDraw();
buffer.image(canvas, 0, 0);
buffer.endDraw();
image(canvas, 0, 0);
}
이 일을 변경해야하지 않는다, 그럼에도 불구하고 결과는 이미지가 화면에 두의 구형에 "정지"는 것이다. 웬일인지 canvas
가 매번 다시 쓰여지고 있지만 똑같은 것을 반복해서 그려주는 것처럼 보입니다. 대신
image(buffer, 0, 0);
를 읽고 마지막 라인을 변경
는 "동결"버퍼지만, 그 위에 모든 시간이 지남에 따라 새로운 RECT 그리기 이전 동작으로 돌아 간다.
어떤 일이 일어나고 있는지 알 수 있습니까?
'image()'를'set (0, 0, buffer)'로 바꾸면 문제가 해결되지만 내 질문에는 답하지 않습니다. 여전히 궁금한'image()'가 문서화되지 않은 것에 대해 궁금해 할 것입니다 ... –