크로스 플랫폼 C ++ / OpenGL ES 개발 (iOS / Android) [닫기]


10

나는 이미 C ++과 OpenGL에 대한 합리적인 경험을 가지고 있으며 최근에 모바일 게임 개발을 시도하기로 결정했습니다. Java를 사용하여 간단한 OpenGL ES Android 앱을 성공적으로 만든 후 가능한 적은 재 작성 코드로 Android와 iOS를 모두 대상으로하는 방법을 연구했습니다. Visual Studio 2015의 자랑스럽게 자랑되는 크로스 플랫폼 앱 개발 도구를 사용해 보았지만 너무 새롭기 때문에 문서화가 너무 적습니다. 프로그램이 제공 한 템플릿 프로젝트를 만들 수는 있지만 이러한 템플릿을 사용하여 게임에 자산을 추가하거나 터치 스크린 입력을 처리하는 방법을 알 수 없었습니다.

유감스럽게도 Google과 함께 찾기에는 너무 구체적인 욕구가 있습니다. Android 및 iOS 용 얇은 플랫폼 별 래퍼와 함께 C ++을 사용하여 OpenGL ES 게임을 만들고 싶습니다. 사람들은 나에게 비슷한 질문을했지만 (정확히 동일하지는 않지만) 두 명 이상의 응답자는 UI에 대해 걱정할 필요가 없기 때문에 내가하고 싶은 일이 가능할뿐만 아니라 상대적으로 쉽다고 말했습니다.

이 튜토리얼을 시도 했습니다 거의 3 년이 지났으므로 아마도 오래된 기술을 위해 설계되었으므로 결과적으로 설명되지 않은 다양한 버그가 발생했습니다. 그러나 현재로서는 그 튜토리얼이 내가 찾은 것에 가장 가까운 것입니다. 그 밖의 모든 것은 Android 전용이거나 Marmalade SDK를 사용하기 위해 매년 수백 달러를 지불 할 것을 권장합니다. 때로는 코드를 두 번, 한 번은 Java로, 한 번은 Objective-C로 작성하는 느낌이 들지만이 솔루션은 가능하지만 어떤 이유로 든 현대적인 세부 사항에서는 다루지 않는다는 지식에 동기를 부여받습니다.

요약하면, 소량의 플랫폼 별 코드로 싸인 단일 C ++ 코드베이스로 iOS 및 Android 용 OpenGL ES 게임을 만들고 싶습니다. 그러나 여러 사람들이이 방법을 권장했지만 그 방법을 알려줄 수있는 사람은 아무도 없습니다. 누군가 그것이 실제로 가능한지 말해 줄 수 있습니까? 그렇다면 가능하다면 어떻게 할 수 있는지, 어디에서 어떻게 배울 수 있습니까?


시도 적인 Cocos2D-X , 또는 unity3d
Ali1S232

1
unity3d는 소스 액세스 권한이 없으므로 OP가 요청하는 것과는 거리가 멀습니다. 나는 cocos2d-x를 사용했으며 컴파일 문제는 여전히 어느 정도 있습니다. Objective-C의 영향도 느껴지지만 어떤 사람들은 그런 것을 좋아할 수도 있지만 저에게는 그렇지 않습니다. 그러나 오픈 소스 솔루션이므로 OP 시간 조사 할 가치가 있습니다.
Matthew Sanders

답변:


6

당신은 유사한 질문에 대한 내 대답을 찾을 수 있습니다 여기에 도움이 될 수 있습니다.

다른 솔루션의 소스 코드를 살펴 보는 것도 도움이 될 수 있습니다. 고도 (Godot) 엔진 당신이 지불 아무것도 필요가 없습니다 그래서 예를 들어 크로스 플랫폼 오픈 소스 게임 엔진입니다.

다른 답변 에서 언급했듯이 하나의 IDE를 사용하여 작업을 수행 할 필요는 없습니다. CMake , Scons기타 여러 빌드 도구 는 플랫폼 및 IDE에서 크로스 컴파일 / 빌드 프로세스를 도와줍니다.

예를 들어 Godot EngineScon을 사용 하고 LLVM 프로젝트 (일명 C / C ++ / Objective-C 컴파일러 clang 에서 사용하는 컴파일러 프레임 워크 )는 CMake를 사용합니다 .

게임에 대한 대중적인 접근 방식은 C / C ++에서 엔진을 구축하고 언급 한 바와 같이 플랫폼 별 정보를 추상화하는 것입니다. iOS 및 Android의 경우 OS와 인터페이스하는 수명주기 관리 로직입니다. 여분의 마일을 원하고 Emscripten 을 사용하여 asm.js로 컴파일 하고 브라우저에서 기본 속도를 거의 실현 하고 싶다면 requestAnimationFrame 호출에 필요한 주요 루프를 추상화하는 것과 비슷한 작업을 수행하고 있습니다 .

EmscriptenSDL 을 사용 하여 플랫폼 별 추상화를 처리하는 데 도움을주기 때문에 포팅 프로세스를보다 쉽게 ​​수행 할 것을 권장하지만,이를 수행하는 데 방해 가되지는 않습니다 (많은 연구, 디버깅 등).

당신이 정말로, 정말로 미쳤다면 당신은 내가하고있는 일을하고 LLVM 의 힘을 사용하여 자신의 언어 를 작성하여 지원되는 플랫폼 에서 네이티브 C ABI 또는 JIT 로 컴파일 할 수 있습니다.

요점은 실제로 가능하지만 일부 도로는 다른 도로보다 복잡하고 시간이 많이 걸린다는 것입니다.

참고 : iOS로 컴파일하려면 XCode 와 함께Mac, VM 또는 Hackintosh 를통해 Mac OSX를 사용해야합니다. 이것이 Macbook Pro가 개발 시스템의 훌륭한 후보가되는 이유 중 하나입니다.

참고 2 : 오늘날 많은 크로스 플랫폼 엔진이 게임 특정 로직에 스크립팅 언어를 사용한다는 점은 언급 할 가치가 있습니다. 예를 들어 Unity 는 소스 코드 근처에 있지도 않습니다 (기본 플러그인을 작성할 수는 있지만). 이는 스크립팅 언어가 플랫폼에 구애받지 않기 때문에 (특히 VM에서 실행되는 해석되는 언어) 개발주기를 단축하고 포팅을 최소화하는 데 도움이됩니다. 내 언어의 목표는 JIT (주로 개발 시간 절약)와 정적 컴파일을 모두 허용하는 것입니다.

참고 3 : 아직 찾지 못한 경우. SDL 또는 플랫폼 특정을 추상화하는 다른 솔루션을 사용하지 않는 경우 각 플랫폼의 특정 C / C ++ 인터페이스 기능을 사용해야합니다. iOS를 사용하면 컴파일러 (위에서 언급 한 것처럼)가 이미 C / C ++를 지원하므로 XCode에서는 매우 간단합니다. Android에서는 NDK 를 활용하고Java와 C / C ++ 간의 마샬링 호출을 사용해야합니다.


1
Godot Engine의 소스 코드를 살펴 보았습니다. 조금 지나친 것 같습니다. 차라리 필요없는 기능없이 나만의 것을 만들고 싶습니다. 그래도 어떻게 해야할지 잘 모르겠습니다. 아직 안드로이드에서 C ++ 코드를 성공적으로 실행할 수 없었습니다.
Craig Horwood

hehe ... 나중에 NDK는 소풍이 아닙니다. 솔직히 개발자 친숙도 카테고리에서 도움이 필요한 Google을 찾습니다. SDL off limit을 사용하고 있습니까? 필요한 경우 답변을 업데이트 할 수있는 훨씬 더 많은 정보가 있습니다.
Matthew Sanders

SDL은 제한이 없지만 거기에 가지 않는 것을 선호합니다. 다시 한 번, 프레임 워크없이 수행 할 수있는 지식이 항상 남아 있습니다.
Craig Horwood

나는 그 벌레에 끊임없이 물 렸기 때문에 당신이 어떻게 느끼는지 압니다. 나는 과거에 NDK를 사용해 왔으며 설정 및 컴파일 방식이 많이 바뀌지 않았다고 생각합니다. 터미널을 통해 과거에 GDB를 직접 사용해야했기 때문에 디버깅이 개선 되었기를 바랍니다 .IDE는 지원하지 않지만 안드로이드 스튜디오에 NDK 지원을 추가 하기 시작한 것처럼 들립니다 . hellojni 예제 를 사용해 보셨습니까 ?
Matthew Sanders

NDK는 현존하는 가장 역겨운 것들 중 하나입니다. bgfx를 참조 github.com/bkaradzic/bgfx 로 유용하게 사용할 수 있습니다. 원하는 만큼 얇지는 않지만 여러 렌더링 백엔드가 있습니다.
JBeurer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.