크로스 플랫폼 게임 제작을위한 팁이 있습니까? [닫은]


답변:


44

추상화 계층 뒤의 플랫폼 별 항목 숨기기

이는 렌더링, 오디오, 사용자 입력 및 파일 IO와 같은 것을 의미합니다. 런타임 성능 저하를 유발하지 않으면 서 플랫폼 별 구현 파일이있는 플랫폼에 구애받지 않는 헤더라는 것을 추상화하는 일반적인 트릭입니다.

// FileSystem.h
class FileSystem {
public:
    FileHandle OpenFile(const char * path);
    // other stuff...
}

// FileSystemWindows.cpp
FileHandle FileSystem::OpenFile(const char * path) {
    // call windows API...
}

그런 다음 각 플랫폼의 빌드를 구성하여 적절한 .cpp 파일을 빌드하십시오.

컨텐츠 파이프 라인을 플랫폼 독립적 인 자산에서 읽고 각 플랫폼에 대한 플랫폼 별 컨텐츠를 출력하십시오.

예를 들어, 텍스처를 .tga 또는 .psd로 제작 한 다음 파이프 라인을 사용하여 필요한 다른 플랫폼 별 형식으로 자동 변환 할 수 있습니다.

데이터의 특정 메모리 레이아웃 또는 엔디안을 가정하지 마십시오

플랫폼은 바이트 순서, 패딩, 정렬 및 단어 크기가 다를 수 있습니다. 이에 관심이있는 모든 코드는 모든 플랫폼에서 철저히 테스트해야합니다.

모든 플랫폼에서 항상 테스트

당신은 것입니다 플랫폼 고유의 버그에 의해 물린 얻을. 차라리 물리지 않겠습니까, 아니면 게임을 문 밖으로 내보내려고 할 때 맞습니까?


2
#ifdef PLATFORM_WINftw 부족
tenpn

당신은 결코 그것을 벗어날 수 없습니다. 당신은 그것을 최소화하기를 희망 할 수 있습니다.
munificent

8
이를 수행하는 좋은 방법은 모든 플랫폼 특정 코드를 동일한 인터페이스를 가진 세트 공유 라이브러리로 옮기는 것입니다. 그러면 #ifdef가 플랫폼에 대한 올바른 라이브러리를 부트 스트랩하도록 제한 할 수 있습니다.
Neel

1
+1, 좋은 의견. STL조차도 플랫폼에 따라 다릅니다 (예, 일부 함수는 다른 컴파일러에서 다른 기능을 수행함)를 기억하십시오.
Simon

추가 기능을 호출하면 성능이 저하됩니까? CPU는 레지스터에서 데이터를로드하거나 이동해야합니다. 시스템 호출로 충분하지 않습니까?
TheBlueCat

10
  • 플랫폼에서 플랫폼으로 갈 때 최소한의 번거 로움을주는 opengl / sdl과 같은 API를 사용하십시오.

  • 지원하려는 플랫폼을 알고 있어야합니다. 향후 멀티 플랫폼을 지원할 것이라고 생각하기 때문에 OpenGL을 사용하지 마십시오. 계속해서 시작하십시오.

  • 지원하려는 각 플랫폼에 어떤 하드웨어 제한 사항이 있는지 확인하십시오.


두 번째 요점은 충분히 강조 될 수 없습니다. 게임의 대상이 누구인지 확인하십시오 (캐주얼 게임 인 경우 최소한 OSX 및 Windows에서 게임을 원하므로 OpenGL이 최선의 옵션 임). 세 번째 요점은 엔진이 작동하는 곳이기도합니다. Unreal과 같이 기능이 풍부하고 리소스가 많은 엔진을 사용하여 DS 게임을 만드는 것은 비논리적입니다. 요점은 또한 두 번째 질문과 관련이 있습니다. 게임의 대상을 설정하십시오. 캐주얼 게임을한다면 대부분의 사람들의 컴퓨터는 파티클을 다루지 않을 것입니다.

7

#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif코드 전체에 산란을 피하십시오 .

때로는 더 쉬운 방법처럼 보이지만 장기적으로 문제가 발생할 수 있습니다. 모든 플랫폼 구현이 자체 포함되도록 자체 파일로 제한해야합니다.

플랫폼을 추가하는 것은 주로 새로운 구현 파일을 추가하는 것과 관련이 있으며 필요한 몇 가지 기존 파일 만 수정하면됩니다.


4

크로스 플랫폼 인 많은 라이브러리가 있습니다. 어디서나 실행하기 위해 OpenGL로 직접 작성할 필요는 없습니다. OGRE는 이름을 지정하려는 모든 플랫폼에서 작동하는 렌더링 엔진의 훌륭한 예입니다.

내 경험상 가장 큰 관심사는 빌드 시스템입니다. Visual Studio를 사용하여 Windows에서 개발하는 경우 코드 가 Linux에서 컴파일 될 수 있지만 쉽게 빌드 하는 데 어려움을 겪을 있습니다. 플랫폼 별 프로젝트 파일 (Linux의 makefile, Windows의 VS 프로젝트, Mac의 XCode 프로젝트 등)을 생성하기 위해 동일한 빌드 지침을 사용할 수있는 CMake와 같은 빌드 시스템을 살펴보십시오.


4

파일 저장 및로드 또는 네트워크를 통한 통신을위한 함수를 작성할 때 엔디안을 잊지 마십시오 .

fread / fwrite에 대한 단일 호출 또는 이와 유사한 저수준으로 큰 구조를 읽는 대신 ReadByte / WriteByte 및 ReadFloat / WriteFloat를 작성하십시오. 그러면 나중에 다른 플랫폼을 타겟팅하기로 결정한 경우 변경해야 할 장소가 줄어 듭니다.


+1 * 9000. 이것이 현대 / 사용 아키텍처 (RISC) 측면에서 휴대 전화에만 실제로 적용되는 것 같습니다. 그러나 여전히 중요합니다.
Jonathan Dickinson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.