처리 중에 g4p 컨트롤 라이브러리를 사용하여 다른 창에서 드로잉 명령을 실행하는 버튼을 만들려고합니다. 이 라이브러리에서 자식 창은 코드 this
메인 애플릿을, 그리고 다른 인수는 이름, 위치, 렌더러를 지정처리 중에 외부에서 드로잉 명령 호출
GWindow window = GWindow.getWindow(this, "Main", 100, 50, 500, 500, JAVA2D);
에 의해 생성된다. GWindow는 PApplet의 하위 클래스이므로 그림 코드 과 같이 드로잉 명령을 호출하여 코드를 호출하여 해당 창을 검정색으로 표시 할 수 있어야합니다. 그러나이 방법은 효과가 없으며 그 이유를 알 수 없습니다.
window.addDrawHandler(this, "windowDraw");
windowDraw
방법은
public void windowDraw(PApplet app, GWinData data) {
app.background(0);
}
인 소스 코드, 그리기 핸들러로 상대 : 나는 핸들러 함수에 넣고 창에 추가 할 때 모든 후, 동일한 코드가 작동 메서드 windowDraw
은 this
이라는 GWindow 개체에 의해 호출됩니다.이 개체는 window.background(0);
을 시도했을 때 참조 된 개체입니다. 따라서 window
은 캔버스를 검은 색으로 칠하기 위해 background()
메서드가 호출 된 객체 여야합니다.
이벤트 기반 프로그래밍에 대한 근본적인 오해가있는 경우 알려 주시기 바랍니다. 처리기가 관련 애플릿을 이유에 대한 인수로 사용하는 것처럼 보이지만 핸들러 함수 내부 및 외부에서 호출이 다른 것을 실제로 볼 수 없습니다.
몇 가지 추가 참고 사항 :이 draw()
주 기능 내부에있는 경우 작동합니다. 그것은 setup()
함수의 경우 작동하지 않으며,이 단추 처리기 방법에 있다면 불행하게도 나를 위해, 그것은 작동하지 않습니다 분명히
public void handleButtonEvents(GButton button, GEvent event) {
if (this.button == button) {
if (event == GEvent.PRESSED) {
window.background(0);
}
}
}
, 나는 확실히 만든 나는를 누를 때이 코드가 실제로 실행 단추.
더욱 이상하게도 window
에 대한 위의 그림 호출을 window.strokeWeight(10)
과 같은 것으로 바꾸면 실제로 변경이 수행되고 해당 캔버스의 후속 줄이 두꺼워집니다. 그것은 실제로 물건을 그리는 데 실패합니다. 나는 단지 손실에 처해있다.
예, 그리기 기능에서 조건부를 사용하는 것은 지금 사용하고있는 문제 해결 방법입니다. 그러나 외부 트리거에서 수천 개의 그리기 명령을 계산하기 위해 비싼 시퀀스를 수행하기를 원합니다.이 솔루션은 한 번만 발생하는 것을 보장하는 데별로 도움이되지 않습니다. – ShnitzelKiller
@ShnitzelKiller'PGraphics' 버퍼를 사용할 수도 있습니다. 아니면'noLoop()'함수가 도움이 될 수 있습니다. –
@ ShnitzelKiller 방금 내 대답에 추가 한 업데이트를 참조하십시오. –