비동기 버퍼 저장 함수 설명
buffer_save_async
함수는 버퍼의 일부 내용을 비동기적으로 파일에 저장하는 기능을 제공합니다. 이 함수는 저장된 데이터를 메모리로 다시 읽어오는 데 사용할 수 있는 buffer_load_*
함수와 함께 사용됩니다.
함수 설명
- offset: 저장을 시작할 버퍼 내 위치(바이트 단위)를 정의합니다.
- size: 해당 오프셋에서부터 저장할 버퍼 영역의 크기(바이트 단위)를 정의합니다.
- 이 함수는 비동기적으로 작동하므로, 저장하는 동안 게임은 계속 실행됩니다.
저장된 모든 파일은 "default" 폴더에 위치하게 되며, 비동기 그룹을 사용하는 경우 그룹 이름이 "default"를 대체합니다. 예를 들어, 파일 이름 경로가 Data\Player_Save.sav
인 경우 실제로는 default\Data\Player_Save.sav
에 저장됩니다. buffer_load_async
함수를 사용하여 파일을 로드할 때도 "default" 부분을 경로에 포함할 필요가 없습니다.
HTML5에서는 "default/"가 자동으로 추가되지 않으므로 코드에서 이를 고려해야 합니다. 데스크탑 플랫폼에서 시스템 샌드박스를 비활성화하면 절대 경로로 버퍼를 저장할 때 "default/"가 추가되지 않습니다.
이 함수는 고유한 ID 값을 반환하며, 비동기 저장/로드 이벤트를 트리거합니다. 반환된 ID를 사용하여 async_load
의 ID 값을 확인할 수 있습니다. 이벤트 내의 async_load
맵은 다음 두 개의 키/값 쌍을 포함합니다:
"id"
: 저장 함수에서 반환된 비동기 함수의 ID."status"
: 데이터가 올바르게 저장되었으면 true, 그렇지 않으면 false를 반환합니다.
여러 개의 버퍼를 한 번에 저장하려면 이 함수를 여러 번 호출하여 buffer_async_group_begin
과 buffer_async_group_end
사이에서 사용할 수 있습니다.
함수 구문
buffer_save_async(buffer, filename, offset, size);
매개변수 설명
매개변수 | 유형 | 설명 |
---|---|---|
buffer | Buffer | 저장할 버퍼 |
filename | String | 저장할 파일 이름 |
offset | Real | 저장할 버퍼 내 오프셋 (바이트 단위) |
size | Real | 저장할 버퍼 영역의 크기 (바이트 단위) |
반환값
- 비동기 요청 ID
활용 예제
다음은 buffer_save_async
함수를 사용하는 간단한 예제입니다:
// 버퍼 내용을 비동기적으로 저장
saveid = buffer_save_async(buff, "Player_Save.sav", 0, 16384);
// 저장 완료 후 상태 확인
if (ds_map_find_value(async_load, "id") == saveid) {
if (ds_map_find_value(async_load, "status") == false) {
show_debug_message("저장 실패!");
}
}
이 코드는 buff
라는 버퍼의 내용을 "Player_Save.sav"라는 파일에 저장하고, 저장이 완료된 후 상태를 확인하여 실패 시 디버그 메시지를 출력합니다.
추가 예제:
// 여러 버퍼를 비동기적으로 저장
buffer_async_group_begin();
saveid1 = buffer_save_async(buff1, "Player1_Save.sav", 0, 8192);
saveid2 = buffer_save_async(buff2, "Player2_Save.sav", 0, 8192);
buffer_async_group_end();
이 코드는 두 개의 버퍼를 비동기적으로 저장하는 예제입니다.
// HTML5에서 저장할 때 base64 인코딩 사용
saveid = buffer_save_async(buff, "Player_Save.b64", 0, 16384);
이 코드는 HTML5에서 base64 인코딩된 문자열로 저장하는 예제입니다.