view_surface_id 설명서
view_surface_id
변수는 특정 뷰 포트의 내용을 서피스에 그리거나, 현재 서피스에 대한 참조를 가져오는 데 사용됩니다. 서피스 작업을 할 때는 화면의 전체 가시 영역을 서피스에 캡처해야 하는 경우가 많으며, 이 변수를 사용하여 뷰 포트에 할당합니다. 선택한 뷰에서 보여지는 모든 것이 이제 할당된 서피스에 그려지게 됩니다. 이 경우 뷰는 화면에 그려지지 않으므로, 다음 중 하나를 수행해야 합니다:
- 새로운 뷰를 활성화하고 해당 뷰에서만 서피스를 그리기 (현재 그려지고 있는 뷰를 확인하려면
view_current
사용) - 인스턴스의 Draw GUI 또는 Post Draw 이벤트에서 서피스를 그리기 (이 이벤트들은 뷰와 독립적입니다)
이 변수를 읽으면 선택한 뷰에 할당된 서피스를 가져오거나, 서피스가 할당되지 않은 경우 -1을 반환합니다. 일반적으로 이 함수에 사용되는 서피스는 뷰 카메라의 크기와 같아야 합니다 (뷰 포트가 아님). 아래의 확장 예제는 뷰를 캡처하고 Draw GUI 이벤트에서 그리는 기본 설정을 보여줍니다. 서피스에 대한 더 많은 정보는 '서피스' 섹션을 참조하세요. 또한 view_set_surface_id()
함수를 사용하여 서피스를 뷰 포트에 설정할 수도 있습니다.
문법
view_surface_id[0...7]
반환값: 서피스 또는 -1 (서피스가 할당되지 않은 경우)
확장 예제
이 확장 예제에서는 서피스를 생성하고 이를 뷰 포트 [0]에 할당하여 해당 포트에 할당된 카메라 뷰를 캡처한 후, Draw GUI 이벤트에서 화면에 그립니다. 시작하기 위해 컨트롤러 인스턴스의 Create 이벤트에서 서피스 변수를 초기화해야 합니다:
surf = -1;
서피스 변수를 -1로 설정합니다. 모든 서피스 함수는 드로우 이벤트에서 사용해야 하므로 이상한 오류나 정의되지 않은 동작을 방지할 수 있습니다. 이제 메인 드로우 이벤트에서 다음과 같이 작성합니다:
if !surface_exists(surf) {
surf = surface_create(camera_get_view_width(view_camera[0]), camera_get_view_height(view_camera[0]));
view_surface_id[0] = surf;
}
서피스는 휘발성이므로 OS 메모리 관리 등으로 인해 언제든지 메모리에서 제거될 수 있습니다. 따라서 서피스가 존재하는지 확인하고, 존재하지 않으면 생성하여 뷰 0에 할당합니다. 이제 뷰 0에 나타나는 모든 것이 우리가 생성한 서피스에 그려집니다. 아무것도 하지 않으면 게임을 실행할 때 빈 화면이 나타납니다. 모든 그리기가 서피스에서 이루어지지만 서피스 자체는 어디에도 그려지지 않기 때문입니다. 따라서 이제 Draw GUI 이벤트에서 서피스를 화면에 그려야 합니다:
if surface_exists(surf) {
draw_surface_stretched(surf, 0, 0, display_get_gui_width(), display_get_gui_height());
}
이 코드는 우리가 생성한 서피스를 GUI 레이어 전체에 맞게 늘려서 그립니다.
활용 예제
예제 번호 | 설명 |
---|---|
1 | 서피스를 사용하여 게임의 특정 영역을 캡처하고, 이를 미니맵으로 표시하기 |
2 | 서피스를 사용하여 화면 전환 효과를 구현하기 |
3 | 서피스를 사용하여 UI 요소를 동적으로 생성하고 업데이트하기 |
4 | 서피스를 사용하여 게임의 특정 이벤트에 대한 스크린샷을 찍기 |
5 | 서피스를 사용하여 배경 애니메이션을 구현하기 |
이러한 활용 예제들은 view_surface_id
와 서피스를 효과적으로 사용하는 방법을 보여줍니다.