티스토리 뷰

Processing

[Processing] Multi-Window 출력

생각많은 소심남 2012. 11. 25. 22:30

지난 포스트에서 예고했던 것처럼 프로세싱에서 창 여러개를 띄우는 예제를 해보겠습니다.

다들 해보셨겠지만 지금까지는 창 한개에서만 동작이 되는 걸로 다했었습니다. 하지만 키넥트에 붙여서 사람이 움직이는 모습도 보면서 다른 효과도 창으로 띄울 수 있다면 좋겠지요,


그래서 그 별도의 창을 위한 클래스를 하나만들면 됩니다. 참고로 알아둘 점이 있다면 프로세싱은 Java 기반의 플렛폼이라는 겁니다. 즉, 프로세싱으로 여는 창 자체가 하나의 애플릿이라는 겁니다. 맨먼저 프로세싱을 띄우는 메인 프레임에 대한 클래스를 하나 선언해둡니다. 그런데 이안에서 정의되는 내용은 진짜 메인 프레임에 대한 내용이 아닌 이와 별도로 띄울 창에 대한 설정이라고 생각하시면 편할 것 같습니다.



개념은 이런겁니다. setup에서 size를 통해서 창을 생성하고 이 PFrame을 부릅니다. 그러면 PFrame 안에 들어있는 내용이 실행될텐데 이안에다가 새로운 애플릿을 생성하는 코드를 작성하면 창이 생성되는 것이지요. 우선 다음 창이 생성될 지점과 크기를 지정해줍니다.



그러고 난 후에 새로운 애플릿을 생성해주고 초기화시켜주는 과정을 거치면 됩니다.



이제 그러면 새로운 클래스인 secondApplet에 대해서도 정의하면 되는데 이부분은 프로세싱의 메인 구문과 똑같이 구성됩니다. 참고로 640,480 크기의 창으로 만들기 위해서 다음과 같이 작성했습니다.


이렇게 하면 이제 PFrame과 secondApplet에 대한 클래스 정의가 끝났습니다. 이제 전역적으로 PFrame과 secondApplet에 대한 선언을 해주고 똑같이 사용하면 됩니다. 유의할 것은 앞에서 언급한 바와 같이 setup에서 반드시 PFrame에 대한 초기화가 이뤄져야 한다는 겁니다.



자 이상태에서 이제 실행을 시켜보면 딱 다음과 같이 나오게 됩니다.


보는 것처럼 창이 두개가 나타나는데 하나는 프로세싱 스케치 다른 하나는 자바 애플릿으로 나타납니다. 그런데 조금 이상하지 않나요? 분명 창 크기를 둘다 640x480으로 했는데 크기가 조금 달라보입니다. 그 이유는 이거 두개를 겹쳐보면 알 수 있습니다.


보시다시피 생긴 자바 애플릿의 틀을 포함한 창크기가 스케치의 창크기와 동일하다는 것을 알 수 있습니다. 즉, 위와 같이 setbound와 클래스를 통해서 생기는 애플릿은 틀을 포함한 전체크기가 된다는 것을 알 수 있습니다. 같게 하고 싶으시면 height 부분을 조금만 늘려주면 되겠지요.


자 이제 창을 두개 만들었으니까 각각을 어떻게 쓰는지를 알아야 하는데 무척 간단합니다. 그냥 앞에서 선언한 것처럼 자바 애플릿에 띄우고 싶으면 s를 접두어로 붙이면 되고 그냥 메인 창에 나타내고 싶으면 그냥 쓰면 됩니다. 아니면 secondApplet클래스의 draw에다가 써도 되겠지요. 그래서 지난 포스트에서 다뤘던 동영상 재생을 두 창에 나눠서 해보도록 하겠습니다.



흔히 동영상 재생에 많이 나오는 transit.mov와 cat.mov입니다. 아마 예제 파일을 잘 찾아보시면 나올겁니다. 코드는 다음과 같습니다. 

우선 secondApplet에서 movie를 재생하기 위해서 movie 자료형을 추가시키고 이 내부에서 movieEvent를 생성합니다.



그 다음에 Main 의 setup에서 해당 동영상을 읽어오는 작업을 수행합니다. 그런데 창을 나눠서 불러야 겠지요. 그래서 secondApplet에 부를 movie는 s.movie라고 불러야 합니다. 마지막으로 image도 그런식으로 부르면 되겠지요.


제가 테스트를 해본 결과로는 secondApplet 클래스 내에서는 data 폴더로 접근이 안되더군요. 그래서 대안책으로 main setup에서 위와 같이 처리했습니다. 영상으로는 다음과 같이 나타납니다.



주말동안 삽질한게 이렇게 나오네요. 오늘은 딱 여기까지 입니다. 다음 포스트에서는 이제 본격적으로 키넥트를 활용해서 Multi-Window를 다뤄보고자 합니다.


댓글