문제

요약:

바퀴를 재창조하지 않고 C에서 "두꺼운 클라이언트"게임을 프로그래밍 할 수 있습니까?, 아니면 총알을 물고 도서관이나 SDK를 사용해야합니까?나는 중간 정도의 C 프로그래머이며 포인터, 데이터 구조, 메모리 위치 등과 함께 일하는 것을 두려워하지 않습니다.그것이 컨트롤을 줄 것이라면 훌륭한 "두꺼운 클라이언트"게임을 만들어야합니다.그러나 저는 힘과 통제를 위해 고급 언어 및 프레임 워크를 피하려고 생각합니다. ~ 아니다사용의 용이성.

나는 언젠가 사이드 프로젝트로 2D 격투/플랫폼 게임을 다루는 데 관심이 있습니다.저는 주로 Python, Ruby 및 PHP 경험이 있는 Linux 서버 측 프로그래머입니다.나는 이러한 언어 중 일부에 훌륭한 프레임워크가 있다는 것을 알고 있습니다. 파이게임.나는 또한 사람들이 Air나 .NET과 같은 분야에서 성공했다는 사실도 알고 있습니다.하지만 몇 가지 우려되는 점은 다음과 같습니다.

  • 성능:스크립팅 언어는 느리기로 악명이 높습니다.실시간 게임을 만드는 경우 최대한 빠른 속도로 게임을 만들고 싶습니다.
  • 거대한 바이너리:.NET과 같은 프레임워크나 Ruby와 같은 스크립팅 언어를 사용하면 다른 방법으로는 필요하지 않은 큰 CLR이나 라이브러리가 생성되는 경우가 많습니다.내가 만들고 싶은 게임은 작고 단순할 것입니다. CLR이 게임 자체보다 커지는 것을 원하지 않습니다!
  • 추가 물건:솔직히 말해서, 나는 내 코드를 더 잘 다룰 수 있다면 큰 게임 라이브러리의 짐을 물려받는다는 생각이 마음에 들지 않습니다.

제가 이 질문을 하는 이유는 제가 Not Invented Here Syndrome에 매우 취약하다는 것을 알고 있기 때문입니다.나는 항상 그것을 직접 프로그래밍하고 싶어하는데, 그것이 많은 시간을 낭비한다고 확신합니다.그러나 이것은 나에게 매우 자주 적용됩니다. 예를 들어 다음을 사용하는 대신 울타리 (ORM 및 GUI 툴킷이 내장된 매우 큰 웹 프로젝트 프레임워크) 저는 다음과 같은 더 작은 Ruby 도구 배열을 사용했습니다. 고문 그리고 계속 아름답게 어울리네요.

그래서 저는 SO 전문가 여러분에게 문의합니다.내가 순진한 걸까?내가 보는 방법은 다음과 같습니다.

  • C를 사용하세요
    • 단점
      • 아마도 프로그래밍을 싫어하게 될 것입니다.
      • 바퀴를 재발명할 위험이 높음
      • 시간이 너무 오래 걸려 흥미를 잃을 위험이 높음
    • 장점
      • 검증된 사실 - 대부분의 A급 게임은 C로 수행됩니다. (이것이 오늘날에도 여전히 사실입니까?)
      • 메모리 관리, 속도, 자산 관리 등에 대한 높은 수준의 제어가 가능하며 처리 방법을 배울 수 있다고 믿습니다.
      • 엉터리 없음
  • 프레임워크 또는 SDK 사용
    • 단점
      • 크기가 너무 큰 결과물의 위험
      • 게임 개발의 모든 측면에서 원본 라이브러리 작성자에게 의존합니다. 원하는 기능이 없으면 어떻게 됩니까?직접 프로그래밍해야 하는데 나쁘지는 않지만 애초에 상위 수준 프레임워크를 사용하려는 목적을 부분적으로 무너뜨립니다.
      • 성능 문제가 발생할 위험이 높음
    • 장점
      • 훨씬 빠른 개발 시간
      • 유지 관리가 더 쉬울 수도 있습니다.
      • 일반적인 패러다임을 재창조하는 데 시간을 낭비하지 마세요.

이 목록에 또 무엇을 추가할 수 있나요?그것은 순수한 판단을 요구하는 것입니까, 아니면 누군가가 나를 대신하여 거래를 성사시킬 수 있습니까?도서 제안을 환영합니다.

도움이 되었습니까?

해결책

내 현재의 생각은 다음과 같습니다.

  • 프로그램을 배우려면 기본 요소에서 게임 엔진을 위쪽으로 만들기 시작하십시오 (기본 데이터 구조 구현 - 목록, 맵 등). 나는 이것을 한 번했고, 그것은 학습 경험 이었지만 많은 실수를 저질렀으며, 두 번째로 이것을하지 않을 것입니다. 그러나 프로그래밍 방법을 배우고 시원한 것을 만들고 결과를 보는 것은 이것을 높이 평가할 것입니다.

  • 적절한 게임을하려면 원하는 라이브러리를 사용하고 모든 게임 인프라를 직접 설계하십시오. 이것이 제가 지금하고있는 일이며 STL, ATL/WTL, Boost, SQLITE, DIRECTX 등과 같은 모든 멋진 일을 사용하고 있습니다. 지금까지 나는 중간/게임 논리 측면에 대해 많은 것을 배웠습니다. 코드와 디자인.

  • 아티스트 및 기타 사람들과 협력하여 완제품을 만들고 기존 엔진 중 하나 (Ogre, Irrlicht, Nebula, Torque 등)를 사용하고 게임 논리와 아트를 추가하려면 게임 논리와 예술을 추가하십시오.

내가 배운 마지막 지혜 중 하나는 여기서 발명되지 않은 증후군에 대해 걱정하지 않는다는 것입니다. 다른 라이브러리 (예 : STL, Boost, DirectX 등)가 그 부분에 쓸 수있는 것보다 훨씬 더 많은 개발 시간 (또는 세 개)의 수준 (또는 3 개)의 순서 (또는 3 개)가 더 많다는 것을 깨달았습니다. 게임/엔진의. 그러므로 이러한 것들을 직접 구현하는 유일한 이유는 당신이 그들에 대해 배우고 싶을 때입니다.

다른 팁

나는 당신이 오류 아래에서 일하고 있다고 믿습니다.

게임 프로그래밍을위한 몇 가지 프레임 워크가 있습니다. 게임 디자인의 합병증에 많은 경험을 가진 사람들이 작성한 사람들, 거의 확실히 더 많은 것입니다.

다시 말해, 프레임 워크를 사용하지 않으면 "성능 문제의 위험이 높습니다".

나는 당신이 시도하는 것이 좋습니다 피글렛.

  • OpenGL을 활용하기 때문에 성능이 좋습니다.
  • 컴팩트한 올인원 라이브러리
  • Python 외에는 추가 종속성이 없습니다.

몇 가지 테스트를 수행하여 충분히 빠르게 만들 수 있는지 확인하세요.더 낮은 수준으로 이동하지 않는다는 것을 스스로 증명하는 경우에만 가능합니다.하지만 나는 python + pyglet이 그것을 처리할 수 있다고 확신합니다...최악의 경우 몇 가지 C 확장을 작성해야 합니다.

오늘날, 나는 당신이 한계를 넓히는 일을하려고하지 않는 한 성과 문제를 안전하게 무시할 수있는 시점에 있다고 생각합니다. 예를 들어, 게임이 Quake II보다 더 복잡하지 않다면 가장 많이 할 수있는 도구와 라이브러리를 선택해야합니다. 당신의 시각.

Quake II를 선택한 이유는 무엇입니까? 실행하기 때문에 .NET 용으로 컴파일 된 버전, 현재 컴퓨터에서 허용 가능한 프레임 속도 이상으로 소프트웨어 렌더러와 함께 실행됩니다. (원하는 경우 - 여러 프로세서와 그래픽 하드웨어를 허용 가능한 속도로 에뮬레이션하는 MAME 비교)

엔진을 만들거나 게임을 만들려면 여기에 있는지 스스로에게 물어봐야합니다. 당신의 목적이 게임을 만드는 것이라면, 확립 된 게임 엔진을 반드시보아야합니다. 2D 게임 개발의 경우 살펴보십시오 토크 게임 빌더. 그것은 매우 강력한 2D 게임 엔진/SDK로, 1 일부터 제작에 들어갈 수있는 매우 강력한 도구, 콘텐츠 팩과 통합하는 많은 도구가 있으며 변경 및/또는 학습하려는 경우 전체 소스 코드를 얻습니다. 작동 방식. 또한 Mac OSX 호환이며 커뮤니티에 Linux 버전이 있습니다.

콘솔 쪽에서 무언가를 찾고 있다면 그것들도 가지고 있습니다.

아무도 언급하지 않은 것에 놀랐습니다 XNA. Directx Directx 프로그래밍의 많은 보풀과 구두를 제거하면서 관리 된 DirectX 프로그래밍을 위해 Directx 주위에 구축 된 프레임 워크입니다.

성능 면적, 대부분의 2D 및 3D 게임 작업, 특히 전투 게임과 같은 것을 구축하는이 플랫폼은 매우 잘 작동합니다. 그렇지 않습니다 ~처럼 Bare Metal Directx 프로그래밍을하는 것처럼 빠르지 만 매우 가까워지고 관리되는 환경에서도 마찬가지입니다.

XNA의 또 다른 멋진 장점은 대부분의 코드가 Xbox 360에서 실행될 수 있으며 네트워크 연결을 통해 디버깅 될 수 있다는 것입니다. Xbox Live 팀의 Xbox Live Arcade에서 유통 및 판매를 위해 XNA 게임을 승인 할 수 있습니다. 따라서 프로젝트를 상업적 상태로 가져 가려면 처분 할 때 사용 가능한 배포 수단이있을 수 있습니다.

모든 MS 개발 도구와 마찬가지로 문서 및 지원은 1 차 요금이며 많은 자습서, 기존 프로젝트 등이있는 대규모 개발자 커뮤니티가 있습니다.

콘솔에서 게임을 할 수 있기를 원하십니까? 학습 경험으로하고 싶습니까? 최종 제품이 크로스 플랫폼이되기를 원하십니까? 지금까지 어떤 도서관을 살펴 보셨습니까?

2D 게임의 경우 성능이 문제가되지 않는다고 생각합니다. 가장 짧은 시간 내에 화면에서 결과를 얻을 수있는 무언가를 사용하는 것이 좋습니다. Python을 수행 한 경험이 많으면 Pygame이 좋은 선택입니다.

앞으로 3D 게임을 할 계획이라면 Ogre를 살펴 보는 것이 좋습니다.http://www.ogre3d.org). 그래픽 API를 추상화하는 크로스 플랫폼 3D 그래픽 엔진입니다. 그러나 2D 프로젝트의 경우 아마도 과잉 일 것입니다.

오늘날 A-List 게임의 가장 일반적인 구현 언어는 C ++이며, 많은 게임은 게임 이벤트 스크립팅을위한 스크립팅 언어 (예 : Python 또는 LUA)를 포함합니다.

게임을 작성하는 데 사용하는 도구는 작성 이유와 요구 사항과 관련이 있습니다. 이것은 실제로 다른 프로그래밍 프로젝트와 다르지 않습니다. 그것이 부수적 인 프로젝트이고, 당신이 직접하고 있다면, 당신은 이것에 얼마나 많은 시간을 소비 해야하는지, 성과 요구 사항이 무엇인지 평가할 수 있습니다.

일반적으로 오늘날의 PC는 스크립팅 언어로 작성된 2D 플랫 포머를 실행하기에 충분히 빠릅니다. 스크립팅 언어를 사용하면 더 빨리 프로토 타입을 만들 수 있으며 게임 플레이를 조정할 시간이 더 많습니다. 다시 말하지만, 이것은 다른 프로젝트와 다르지 않습니다.

C ++와 함께 가면 "내가 원하기 때문에"그 이유가 더 정교 할 필요가 없다면, 렌더링 및 오디오 지원을 위해 SDL을 보는 것이 좋습니다. 조금 더 쉬워 질 것입니다.

기본 기술 (DirectX 또는 몇 가지 이상한 이유로 최적화 된 블리터를 작성하려면)을 배우려면 C ++를 사용하십시오.

모든 것을 말하면서, 나는 당신에게 조기 최적화에 대해 당신을 경고 할 것입니다. 2D 게임의 경우 먼저 Python 및 Pygame을 사용하는 것이 좋습니다. 현대 PC에서 이러한 도구가 부적절한 것으로 판명되면 놀랄 것입니다.

사람들이 C/C ++/Python에 대해 말한 것에 대해, 저는 게임 개발자이고 회사는 C를 장려합니다. B/C C ++는 나쁘지 않지만, 잘못 쓰여진 C ++는 읽기가 어렵 기 때문에 게임 개발을위한 독입니다. C.와 비교하여 디버그 (C ++는 제대로 사용될 때 혜택을 제공하지만 주니어 남자가 실수를 저지르고 시간 싱크대가 엄청납니다)

실제 질문에 관해서는 : 당신의 목적이 무언가를 작동시키는 것이라면 라이브러리를 사용하십시오.

그렇지 않으면 매우 중요한 이유로 직접 코딩하십시오. 관행
데이터 구조 조작을 실천합니다. 자신의 데이터를 관리하는 데 필요한 시간이 있습니다. 유틸리티 코드 디버깅 실습.

종종 libs는 당신이 원하는 것을하고 훌륭하지만 때로는 당신의 특정 사용 사례는 LIB에 의해 매우 나쁜 것으로 처리되며 자신의 글을 쓰면 큰 혜택을 얻을 수 있습니다. 이것은 특히 PC에 비해 콘솔에 있습니다

(편집 :) 스크립트 및 쓰레기 수집에 관한 : It ~ 할 것이다 콘솔에서 당신을 죽이십시오. 최근 게임에서 나는 우리의 요구를 채우기 위해 Unreal에 쓰레기 수집의 주요 부분을 다시 작성해야했습니다. 편집자 부분. 실제 게임에서 더 많은 일을해야했습니다 (나뿐만 아니라) (우리가 Unreal의 원래 사양을 넘어서고 있었지만 공평하게)

스크립팅은 종종 좋지만 "I win"버튼은 아닙니다. 일반적으로 플랫폼의 한계를 뛰어 넘는 경우 이익이 사라집니다. 적절한 스크립트가 얼마나 적절한지를 결정할 때 내 평가 함수로 "Platforms CPU의 백분율"을 사용합니다.

C/C ++/OBJ-C를 선호하는 한 가지 고려 사항은 다양한 관심 분야를 위해 다양한 라이브러리를 혼합하고 일치시킬 수 있다는 것입니다. 다시 말해, 당신은 프레임 워크에서 기능의 구현에 붙어 있지 않습니다.

나는이 접근법을 사용합니다 내 게임; 사용 다람쥐 2D Physics의 경우 LUA는 임베디드 스크립팅 언어 및 Apple의 OpenGl ES 구현입니다. 나는이 모든 것을 C 언어로 묶기 위해 접착제를 씁니다. 최종 제품은 게임 객체를 정의하고, 인스턴스를 생성하며, 이벤트가 LUA에 노출 된 C 함수에서 서로 상호 작용할 때 이벤트를 처리하는 능력입니다. 이 접근법은 사용됩니다 많은 고성능 게임 많은 성공에.

C ++를 아직 모른다면 스크립팅 언어로 나아가는 것이 좋습니다. 처음부터 끝까지 게임을 만드는 데 많은 동기가 부여되며 동시에 새로운 언어를 배우도록 강요하는 것은 관심을 잃을 정도로 천천히 일을하게하는 좋은 방법입니다 (새로운 것을 배우는 좋은 방법이지만 언어...).

대부분의 스크립팅 언어는 어쨌든 바이트 코드로 컴파일되므로 가장 큰 성능은 쓰레기 수집입니다. 나는 히트장 가비지 컬렉션이 얼마나 큰지에 대한 명확한 설명을 제공 할만 큼 충분히 경험이 없지만, 작은 게임에서는 너무 나쁘지 않아야한다고 생각하는 경향이 있습니다.

또한 기존 스크립팅 언어 라이브러리를 사용하여 게임을 만드는 경우 대부분의 성능 중요 영역 (예 : 그래픽)은 어쨌든 (게임 라이브러리에 의해 희망적으로) C ++로 작성 될 수 있습니다. 따라서 CPU의 80%는 대부분의 프로젝트가 작성 되었음에도 불구하고 실제로 C ++ 코드로 소비 될 수 있다고 Python은 말합니다.

나는 당신이 원하는 것이 무엇인지 스스로에게 물어보십시오. 게임을 처음부터 끝까지 작성하고 게임 개발에 대해 배우거나 새로운 언어 (C ++)를 배우십시오. 게임을 쓰고 싶다면 스크립팅 언어로 수행하십시오. 새로운 언어를 배우려면 C ++로 수행하십시오.

예, 게임을 만드는 것들에 대한 모든 세부 사항을 배우고 싶지 않다면 게임 엔진을 사용하고 그래픽, 오디오, 리소스 관리, 디테일의 세부 사항보다는 게임 논리 구축에 집중하고 싶습니다. 등.

개인적으로 나는 토크 게임 빌더 (일명 토크 2D)를 추천하고 싶습니다. 차고 게임. 그러나 아마도 당신의 요구에 맞는 무료 게임 엔진을 찾을 수 있습니다.

나는 대부분의 현대 게임이 C ++에서 이루어질 것이라고 확신합니다. C ++ (내가 인터뷰 한 모든 게임 회사는 C ++ 질문에 대해 인터뷰 한 모든 게임 회사입니다.)
물리학+ 충돌, 사운드, 그래픽 엔진 등에 C ++ 및 기존 라이브러리를 사용해 보지 않겠습니까? 여전히 게임을 작성하지만 평범한 내용은 처리됩니다.

추상화 문제에 대한 다양한 솔루션이 있으며 각 솔루션은 이를 다른 방식으로 처리합니다.

현재 프로젝트에서는 C#, DirectX 9, HLSL 및 SlimDX를 사용합니다.이들 각각은 신중하게 조정된 추상화 수준을 제공합니다.HLSL을 사용하면 내가 작성 중인 셰이더 코드를 실제로 읽을 수 있고 SlimDX/C#을 사용하면 포인터, 순환 종속성을 무시하고 관리되지 않는 코드를 처리할 수 있습니다.

즉, 이러한 기술 중 어느 것도 AI, 조명 또는 물리학 개발의 용이성에 영향을 미치지 않습니다!나는 더 높은 수준의 프레임워크에서는 할 수 없는 방식으로 교과서를 세분화해야 합니다.

XNA와 같은 프레임워크를 사용하더라도 대부분의 비디오 게임 개발 개념이 낯설다면 여전히 받아들이고 배워야 할 것이 많습니다.XNA를 사용하면 짐벌 잠금을 깔끔하게 회피할 수 있지만 기본 셰이딩 개념을 이해하지 못하는 사람들에게는 불행이 따릅니다.반면 DarkBASIC과 같은 제품은 짐벌 잠금 문제를 해결하지 못하지만 셰이딩은 대부분 자동으로 처리됩니다.

첫 번째 엔진이 실제로 사용하는 엔진이 될 수 없을 만큼 충분히 큰 분야입니다.직접 쓰시면 잘 안 쓰실 겁니다.타사 라이브러리를 사용하는 경우 확실히 짜증나는 측면이 있어 교체하고 싶을 것입니다.

아이디어로서 다양한 라이브러리/프레임워크를 사용하고(XNA를 사용하지 않기로 결정하더라도 훌륭한 벤치마크가 됨) 다양한 프로토타입을 구축해 보는 것이 좋습니다.아마도 풍경(물이 있는)이나 우주 물리학 데모일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top