리소스가 너무 많을 때 게임에서 리소스를 어떻게 압축합니까?


10

최근 Allegro 5 프레임 워크를 사용하여 C ++에서 기본 Space Invaders 복제본을 만들었습니다. 완료 한 후 약 10 개의 스프라이트와 13MB의 DLL이 있다는 것을 깨달았습니다. 일부 플레이어에게는 mingW DLL이 없었기 때문에 게임을 매우 혼란스럽게 만들었습니다.

게임에 데이터를 쉽게 추가하고 제거하고 리소스가 차지하는 크기를 줄 이도록 기본적으로 한 자리에 배치하는 방식으로 모든 리소스를 어떻게 포장합니까? 코드 블록을 사용하고 있습니다.


1
자원이라는 용어를 어떻게 이해합니까? 이미지, 사운드 등과 같은 자산 또는이 용어에 DLL을 포함합니까?
Christian Ivicevic

DLL이 많기 때문에 DLL을 적합하게 사용할 수 있는지 선호합니다.
Bugster

내 첫 번째 아이디어는 zziplib모든 평범한 자산을 zip 파일에 저장 한 다음 엔진의 사용자 정의 컨텐츠 파이프 라인을 통해 게임에로드 하는 (오래된 오래된 ...)과 같은 적합한 라이브러리를 찾는 것입니다. 처음에 기본적으로 찾고있는 것은 게임에서 파일을 사용할 수 있도록 zip 파일에서 메모리로 파일을로드하는 방법입니다. dll에 대해서는 일반적으로 실행 파일과 같은 디렉토리에 Windows있거나 권장 하지 않는 or System32디렉토리에 있어야하기 때문에 매우 어렵습니다 ! SFX 아카이브에서 압축을 풀고 실행하는 것은 어떻습니까? TEMP
Christian Ivicevic

3
설치 프로그램을 사용하는 방법에 대해 질문하고 있습니까? DLL은 리소스가 아니기 때문입니다.
Nicol Bolas

답변:


13

여기서 직면하고있는 두 가지 과제는 배포 및 자산 패키징입니다.

분포

전체 응용 프로그램을 원하는대로 디렉토리에 패키지 한 다음 최상위 디렉토리를 .zip 파일에 배치하십시오. 해당 .zip 파일을 배포하십시오. 사용자가 zip을 추출하면 게임 실행에 필요한 모든 것을 갖춘 폴더가 생깁니다.

파일을 어떻게 배치합니까?

  • 귀하의 .dll은 일반적으로 실행 파일과 동일한 디렉토리에 있어야합니다 (예외는 있지만 단순성을 위해 ...)
  • 자산 (이미지, 오디오)은 원하는 위치에있을 수 있지만 실행 파일과 관련하여 이동하는 경우이를 고려하기 위해 리소스로드 코드를 수정해야합니다.

나는 보통 이런 식으로합니다 :

MyGame \ // 최상위 디렉토리에 전체 프로그램이 있습니다.
  bin \ // dll은 컴파일 된 exe와 함께 여기로 이동합니다.
  res \ // 게임 리소스 최상위 디렉토리
    음악\
    음향 효과\   
    목소리\
  cfg \ // 기본 구성 파일 (user-configs는 사용자 디렉토리로 이동)
  MyGame.lnk // 컴파일 된 exe에 대한 지름길

자산 포장

일종의 압축 라이브러리 (zlib, lzo)를 사용하여 모든 게임 리소스 (위의 res \ 디렉토리)를 단일 파일로 압축 할 수 있습니다. 그런 다음 자산을 게임에로드하려면 동일한 압축 라이브러리를 사용하여 리소스의 내용을 실시간으로 추출해야합니다.

그러면 자산을 패치하려고 할 때 어떻게됩니까? 그런 다음 완전히 새로운 자산 파일을 컴파일하여이를 사용자에게 배포해야합니다 (따라서 기본적으로 이미 가지고있는 것을 다시 다운로드하고 소수의 추가 기능을 추가해야 함). ) 문제가 발생하여 자산 파일이 손상 될 수 있다는 사실을 처리합니다.

솔직히, 그 일을하는 것이 사소한 것은 아니며 귀하의 상황에서 보상을 보지 못합니다. 간단한 디렉토리는 10 개의 스프라이트를 캡슐화하기에 충분해야하며 항목을 추가하고 패치하는 것이 훨씬 쉽습니다. 올바른 디렉토리에 다운로드하고 완료하면됩니다.

설치 프로그램 빌드

이것은 당신이 Windows를 목표로하고 있다고 가정합니다 ... 위의 내용을 일단 알고 나면 게임 설치 프로그램을 작성할 수 있습니다. Visual Studio가 지원하는 ClickOnce 메서드는 모든 비용을 피할 수 있습니다. 일반적인 Windows 설치 프로그램 이 아니며 고유 한 단점이 있습니다.

이 StackOverflow 질문을 살펴보십시오 . 사용할 수있는 설치 프로그램 패키지에 대한 유용한 링크가 포함되어 있습니다. 요즘 많은 사람들이 WiX 를 좋아하는 것 같습니다 . 나는 그것을 직접 사용한 적이 없다. 또한 AdvancedInstallerInnoSetup 은 모두 인기있는 선택입니다.


1
이 답변에 감사드립니다. 이제 게임 배포 방법에 대한 기본 아이디어를 얻었습니다.
Bugster

1
WiX를 사용하지 마십시오. 머리가 아프고 가족을 죽일 것입니다.
Ray Dey

1
다른 옵션이 있습니다. 하나 이상의 자산 패키지가있을 수 있습니다. "resources.pak, patch1.pak, patch1337.pak, .."와 같은 것은 패치 데이터를 저장하는 방법입니다. 원래 패키지를 수정할 필요가 없으며 엔진이 패치 패키지를 감지하고 주문할 수있게하십시오.
snake5

0

dll을 포함하는 대신 일부 라이브러리를 정적으로 링크 할 수 있습니다. 그래도 모든 라이브러리마다 다른 방법과 방법이 다릅니다.


-1

Enigma와 같은 소프트웨어를 사용하여 파일을 압축하여 단일 .dat에 저장할 수 있습니다. 실행기의 폴더를 변경해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.