Java는 심각한 게임 개발에 적합합니까? [닫은]


64

인터넷을 검색했지만 Java 게임 개발을위한 리소스는 많지 않지만 C ++만큼 많지는 않습니다. 실제로 대부분의 엔진은 C ++로 작성되었습니다. jMonkeyEngine으로 만든 게임을하려고했지만 컴퓨터가 멈출 때까지 게임 속도가 너무 느 렸습니다. 다른 Java 응용 프로그램을 실행하지 않았고 리소스를 많이 사용하는 것도 없었습니다. 반대로 내 컴퓨터는 가장 현대적인 3D 게임을 쉽게 재생할 수 있습니다. 지금 Java를 계속 배우고 개선하면 나중에 C ++을 배워야하므로 전환이 어려울 수 있습니다.

Java는 심각한 게임 개발에 적합한 언어입니까? 진심으로, 나는 현대 컴퓨터에서 많은 지연없이 고품질 그래픽을 의미합니다. 또한 콘솔 용 게임 제작을 고려하고 싶습니다.


25
마인 크래프트는 자바로 제작되지 않습니까? 아니면 주로 OpenGL? 오, Java에서 100 % 설정되지 않은 경우 C #을 확인하십시오. 굉장합니다.
Aralox

7
왜 Stack Overflow C ++ Chat에 오지 않습니까? 우리는 C ++을 좋아하고, 그것이 절대적으로 올바르게 사용될 수 있다고 생각하며, 그렇게하는 방법을 알고 있으며, 공유하게되어 기쁘다.
DeadMG

12
Minecraft는 java + LWJGL + Notch의 코딩 기술이므로 성능면에서 끔찍합니다.
MLProgrammer-CiM 1

3
코딩 게임이든 다른 언어를 사용하더라도 단일 언어로 자신을 잠그는 것은 앞으로 도움이되지 않습니다. C ++ 또는 Python과 같은 다른 방식으로 분기하십시오. 시간이 걸리지 만 더 나은 개발자가됩니다.
loganfsmyth

4
Java / C ++ 전쟁이 밝게 타 오르고 의견을 받아들이 기 전에 특정 예제를 요청할 준비를하고 자신에 대해 더 많은 연구를 할 준비가되어 있기 때문에 많은 잘못된 정보를 얻을 수 있습니다. 그런 다음에 만 모든 작업에 적합한 도구를 선택할 수 있기 때문에 많은 언어를 알아야합니다. 머지 않아 "게임 스타일 프로그래밍"을 배우고 싶다면 (Java)에 익숙한 것을 사용하고 나중에 C ++을 배우십시오. 도대체 나중에 C #에서 콘텐츠 파이프 라인과 Java ME에서 게임을하고 있을지도 모른다. =)
Patrick Hughes

답변:


54

예, 이 목록 에서 증거를 확인하십시오 . LWJGL (Lightweight Java Game Library)을 사용하여 Java로 만든 일부 게임입니다. 고품질 그래픽을위한 OpenGL과 사운드를위한 OpenAL을 제공하는 저수준 프레임 워크입니다. 또한 입력 API를 제공합니다. 이것들을 사용하면 Java로 심각한 게임 개발을 쉽게 시작할 수 있습니다.

현재 두 번째 3D 게임을 Java의 취미 프로젝트로 작성 중이며 좋아합니다. 과거에는 C ++로 게임을 작성했지만 Java로 전환 한 후에는 되돌아 갈 수 없었습니다. Java로 여러 운영 체제를 지원하는 것은 매우 쉽습니다. 예를 들어, Windows에서 1 년 동안 개발 한 이전 Java 게임은 Linux 및 OS X에서 해당 플랫폼에서 아무 것도 컴파일 할 필요없이 한 번의 버그로 Linux에서 즉시 작업했습니다.

반면에 Java를 사용하면 몇 가지 문제가 있습니다.

  1. 가비지 컬렉터. 다른 사람들이 말했듯이 비 결정적 메모리 관리는 문제이며이를 염두에 두어야합니다.
  2. 타사 라이브러리 부족 사용 가능한 대부분의 라이브러리는 Java를 지원하지 않습니다. 반면에 항상 Java에서 이러한 기본 라이브러리를 호출하는 옵션이 있지만 더 많은 작업이 필요합니다. 인기있는 라이브러리에 사용할 수있는 Java 포트 또는 기성품 랩퍼도 있습니다 (예 : Bullet Physics Library의 JBullet-Java 포트를 사용하고 있습니다) . 반면에 Java에는 거대한 클래스 라이브러리가 내장되어있어 게임과 관련이없는 타사 라이브러리의 필요성이 줄어 듭니다. 도서관의 부족은 나에게 문제가되지 않았지만 다른 사람들에게도 가능하다고 상상할 수 있습니다.
  3. Java는 널리 사용되는 게임 콘솔에서 지원되지 않으며 내가 아는 한 Java에서 쉽게 전환 할 수 없습니다. 반면에 인기있는 모바일 플랫폼 인 Android는 특정 형태의 Java를 사용합니다. 이것은 또한 옵션이지만 PC와 Android 장치 모두에서 작동하는 동일한 Java 코드를 제외하고는 아닙니다.
  4. 소규모 커뮤니티. 대부분의 게임 프로그래머는 C ++을 사용하며 제 경험상 종종 Java를 싫어합니다. 다른 사람들로부터 많은 도움을 기대하지 마십시오. C ++ 기술이 없으면 게임 개발에 참여할 수 있습니다.

40

실제로는 아닙니다. 첫 번째로, C ++에 대한 거의 모든 것과 비교할 때 Java에 대한 기존 라이브러리 측면에서는 거의 없습니다 .

둘째, 언어로서의 Java는 단순히 게임 개발에 적합하지 않습니다. 예를 들어, GPU 버퍼를 다루는 경우 Java는 언어가 올바르게 잠겨 있는지 확인하는 데 도움이되는 언어 기능을 제공하지 않습니다. C ++이 수행하는 잠금 해제 또는 처리 또한 성능 문제가 있으며 GC는 결정적이지 않으므로 게임에 매우 나쁩니다.

나는 실행하기 전에 네이티브 코드로 컴파일되지 않은 언어로 상당한 시간을 소비 한 인디가 아닌 게임을 본 적이 없으며, 그렇게하는 인디 게임조차도 희귀합니다. 그래서 지금 당장은 그렇게 할 수 없다는 것입니다.

또한, 지금 Java를 계속 배우고 향상시키고 나중에 C ++을 배워야한다면 전환이 어려워 질 것입니까?

그렇습니다. Java와 C ++는 표면적 구문 유사성에도 불구하고 크게 다릅니다. C ++를 배울 때 Java 경험은 사실상 아무 것도 고려하지 않습니다.

그래픽을 통해 게임 플레이 입니다 가능한 선택, 당신은 Terarria와 마인 크래프트 같은 게임의 성공에서 볼 수 있습니다. 그러나 srs 그래픽을 만들려는 경우 Java에서는 불가능합니다.


6
그는 무거운 그래픽, 지연없이 빠른 게임 플레이를 지정했기 때문에 +1.
Joshua Drake

1
Java의 서명되지 않은 데이터 유형이 없다는 것도 Java에 맞지 않습니다. 예, 해결할 수는 있지만 이상적이지 않으며 기본 데이터를 올바르게 반영하지 않는 코드를 사용하게됩니다.
Maximus Minimus 2016 년

@deadmg 잠금 및 잠금 해제의 경우 입니까? DirectX API 기능을 언급하고 있습니까? & 비 결정적 GC를 갖는 것이 나쁜 점을 말해 줄 수 있습니까?
Quazi Irfan

결정적이지 않은 GC는 월드 멈춤을 잘못 멈추고 프레임을 렌더링하는 데 걸리는 시간보다 오래 잠근 경우 프레임을 삭제하는 것과 같습니다. 실제로 이것은 실제로 자주 발생하지 않으며 메모리 사용을 계획하는 경우 JVM 수집기가 낮은 일시 중지 (프레임 삭제에 대한 안전 한도 내)로 구성 될 수 있습니다. 그럼에도 불구하고 다루어야 할 재미는 없습니다. 결국 C ++을 떠났을 때 얻은 많은 양의 생산성을 되돌려 야합니다.
Michael

2
시작하려면 완전히 다시 작성해야합니다.
DeadMG

25

그래서 저는 게임 개발에 대해 진지하게 생각합니다. Java는 여전히 실용적인 선택입니까? C ++을 배우려고 여러 번 시도했지만 언어가 마음에 들지 않습니다. 나는 왜 그런지 잘 모르겠지만, 대개 배우려고 할 때마다 주제를 파악할 수 없습니다.

Java를 선택한 이유가 C ++을 이해할 수 없기 때문에 Java 프로그램은 고품질 그래픽에 비해 빠르지 않습니다. 더 높은 수준의 언어를 사용하면 더 낮은 수준의 언어를 이해하지 못하여 생산성이 높아지기 때문입니다.

Java로 게임을 작성하는 것이 전적으로 나쁜 생각은 아니라고 생각합니다. 특히 게임이 단순하다면 목발로 사용하는 경우 Java에서 즉시 성능 문제가 발생합니다.

요컨대, 심각한 게임 개발을 위해 Java를 진지하게 받아 들일 수 있습니다. 여기에는 무거운 그래픽, 지연없는 빠른 게임 플레이 및 콘솔로의 쉬운 전환이 포함됩니까?

  1. Heavy Graphics : 가능하지만 C ++ / GL에서와 마찬가지로 Java / LWJGL에서 동일한 작업을 수행합니다 .GPU 버퍼에 바이트 쓰기 및 / 또는 Minecraft와 같이 더 이상 사용되지 않는 표시 목록 사용. 메모리 관리를 이해하지 못하면 올바르게 수행하지 않을 것입니다.

  2. 지연없이 빠른 게임 플레이 : 어떤 언어로도 쉬운 작업이 아니며, 생각을하지 않고 발을 쏠 수 있습니다.

  3. 아니요, Java는 콘솔에서 사용할 수 없습니다.


부수적 인 질문으로 표시 목록이 더 이상 사용되지 않을 때 대체 된 것은 무엇입니까?
Suds

@ Suds : 프로그래밍 가능한 파이프 라인.
DeadMG

하아! 이미 그것을 커버했다. VBO : gamedev.stackexchange.com/questions/22170/…
Jimmy

모바일 플랫폼은 콘솔로 간주 될 수 있습니다. 아마 그가 빅 3에 대해 이야기하고 있었지만 안드로이드는 자바를 사용하고 많은 게임이 만들어졌습니다.
Amplify91

1
@ Amplify91 네, 몇 가지 게임이 안드로이드 용 자바로 작성되었습니다. 그러나 대부분의 좋은 게임과 모든 그래픽 집약적 또는 멀티 플랫폼 게임은 Android NDK를 사용하여 C ++로 작성됩니다.
코요테

15

숙련 된 프로그래머는 일반적으로 많은 프로그래밍 언어를 알고있을 것입니다. 일단 추가 프로그래밍 언어를 익히는 것이 어렵지 않습니다. 그러나 C ++은 모국어가 아니어야하며 아마도 두 번째 언어가 아니어야합니다.

C ++은 런타임 오류 검사를하지 않으면 많은 효율성을 얻을 수 있기 때문입니다. 예를 들어 Java 배열의 끝에서 요소에 액세스하면 프로그래머에게 정확히 무엇이 잘못되었는지 알려주는 예외가 항상 발생합니다. C ++에서는 운이 좋을 때 즉시 충돌 할 수 있지만 매우 자주 다른 데이터를 자동으로 휴지통에 버리고 나중에 나중에 오류가 표시되지 않습니다 .

지금은 Java를 사용하는 것이 좋습니다 (또는 원하는 경우 C #으로 전환하십시오). 그러면 C ++을 사용하는 것보다 더 빠르게 작업을 수행 할 수 있으며 PC의 성능은 문제가되지 않습니다.

보다 안전한 언어로 몇 가지 프로젝트를 완료 한 후 C ++ 학습에 대해 생각해보십시오. C ++는 대부분의 전문 게임 개발 작업에 필요한 것입니다.

C # / XNA를 제외하고 최소한 콘솔에 게임을 작성하는 것은 사무실이있는 회사를 설립해야하며 개발 하드웨어 및 기타 비용으로 사용할 수있는 많은 예산이 있어야합니다.


C ++ 이외의 다른 언어는 당신에게 성취감을 줄 수 있기 때문에 이것은 또한 매우 사실입니다. C ++은 아무것도 느끼지 못하는 데 수백 시간이 걸릴 수 있습니다. 다른 언어를 먼저 배우면 발이 젖을 수 있습니다.
Darkenor

오류 처리 부족에 대한 귀하의 의견은 실제로 C에 관한 것입니다 (그리고 실제로 C 인 소위 C ++ 코드). C ++에는 표준 라이브러리 (및 표준 템플릿 라이브러리)가있어 설명하는 것보다 오류 처리가 훨씬 뛰어납니다. C ++에는 적절한 오류 처리를 제공하는 공급 업체 제공 라이브러리 (예 : MFC)가 있습니다.
재스퍼

9

면책 조항 : 귀하의 질문에 정확하게 대답하지는 않습니다. 그러나, 나는 당신에게 관심을 가질만한 몇 가지 요점을 (간결하게) 언급하려고했습니다.

C ++에 대해 너무 많이 보는 이유는 C ++이 여전히 업계 표준 (콘솔 등에서 가장 일반적인 언어)이기 때문입니다.

Java는 자주 사용되지 않습니다. 마인 크래프트는 꽤 인기있는 게임으로 자바로 크게 만들었습니다. 그러나 그래픽 적으로 그렇게 좋지는 않습니다. Spiral Knights는 나쁘지 않으며 Java로도 제작되었으며 상당한 그래픽을 제공합니다.

Java를 좋아한다면 C #은 구문이 매우 유사하여 C ++과 상호 작용할 수 있다는 장점이 있으므로 필요한 경우 C ++에서 저수준 작업을 수행 할 수 있습니다. Unity는 스크립팅에 C #을 사용할 수 있으며 XNA는 탁월한 선택입니다.

다시, Java는 널리 사용되지 않습니다. 스타일과 구문이 마음에 들면 C #이 매우 유사하고 매우 즐거운 코딩 경험이라고 생각합니다.

나는 당신의 꿈이 그것을 만들기를 바랍니다, 그것은 길을 따라 많은 재미 :)


8
이 게시물에 많은 부정확성이 있습니다. 마인 크래프트 "나쁜"그래픽은 언어와 관련이 없습니다. MC 나쁜 성능은 거대한 성능 문제 때문에 Java가 게임에 나쁜 언어 인 것과 직접 관련이 있으며 LWJGL은 같은 이유로 큰 코딩 프로젝트에 적합하지 않은 라이브러리입니다. 그러나 가장 큰 요인은 Notch의 잘못된 코딩 및 구현이었습니다. C #은 대부분의 Java 성능 문제없이 모든 관리 메모리를 제공합니다. 단점은 C #이 게임과 응용 프로그램 모두에 대해 Microsoft 중심에 있다는 것입니다.
MLProgrammer-CiM 1

2
@EfEs : 난 당신에게 그것을 나누기를 싫어하지만 관리 메모리는 게임에 끔찍한 일이며 XNA에서 게임을 코딩하는 사람들은 C ++로 코딩하는 사람들보다 메모리를 관리하는 데 더 많은 시간을 소비해야합니다. GC의 비 결정적 특성은 언어가 사용되는 방식이 아니라 실제로 모든 것을 모으고 전염병과 같은 할당을 피해야 함을 의미합니다.
DeadMG

이 답변은 100 % 정확하지는 않았습니다. 나는 내가 모호하게 알고있는 예만을 인용했다. DV로 자유롭게 느끼십시오.
ashes999

2
@DeadMG C ++이 갈 길이라는 것을 알고 있습니다. 게임에 C #이 Java보다 낫다는 것을 설명하려고했습니다.
MLProgrammer-CiM

5
오랫동안 C # 개발자이기 때문에 (게임 개발자가 아닌) 풀링 및 메모리 관리는 잘못 설계된 시스템에서 큰 문제라고 생각합니다. 내가 아는 C / C ++ 사고 방식과 개발 방식을 가진 사람들은 사용해야하는 관리되는 메모리, 디자인 및 아키텍처 패턴을 거의 활용하지 못하고 Java / C #과 같은 언어로 활용해야합니다. 내가 말하려는 것은 C / C ++ 기술이나 제품이 나쁘다는 것이 아니라 구문 (예 : Java 및 C #)과 같은 간단한 언어를 사용하더라도 게임을 올바르게 설계하기 위해서는 많은 경험이 필요하다는 것입니다 방법.
Ivaylo Slavov

3

이것은 당신의 질문에 대답하지 않습니다; 그래픽과 콘솔 문제는 당신이 고려해야 할 것 같습니다. 또한 GC는 성능에 영향을줍니다. 그러나 내가 쓰는 것 :

크고 복잡한 OO 프로그램을 작성하는 경우 C ++보다 5 배 빠르게 Java로 작성합니다. 또한 유지 관리가 훨씬 쉬워집니다. 나는 (게임 이외의 소프트웨어를위한 것으로 인정) 전환했고, 나의 생산성은 급등했다. 또 다른 좋은 대안 인 C #은 더 많은 것이 있기 때문에 Java보다 배우기가 더 어렵습니다. 알면 Java보다 훨씬 빠르게 코드를 작성할 수 있습니다. 그것은 당신에게 많은 트릭을 제공합니다. 그러나 이러한 트릭으로 인해 유지 관리가 어려울 수 있습니다. 그리고 Java 라이브러리는 Sun 라이브러리 기존 코드 를 도와줍니다 . C #은 그다지 좋아하지 않습니다.

나는 자바에서 큰 털이 많은 게임을하고 언어가 완벽하다는 것을 알았지 만, 나의 그래픽은 기본적이며 10 분의 1 초가 플레이어들에게는 영원한 슈팅 게임이 아니었다. 또한, 나는 나중에 그것에 더 많은 것을 추가 할 것으로 예상되는 반면, 나는 대부분의 사람들이 그냥 새로운 게임을한다고 생각합니다.


3

봐봐, " 게임 개발에 자바가 가능한가 ?"에 대한 간단한 대답 은 당연하다. 모든 프로그래밍 언어를 사용하여 게임을 만들 수 있습니다. 즉, 의미하지 않는다 해야한다 .

아마도 C ++에서 당신을 끄는 것 (저수준 메모리 관리, 가비지 수집기 없음, 포인터에주의를 기울여야하는 배열 등) 은 컴퓨터의 리소스를 가장 효율적으로 활용하려는 경우 알아야 할 것입니다. . 컴퓨터의 리소스를 가장 효율적으로 활용하면 게임이 가장 잘 실행됩니다.

Java는 배열 범위 검사와 같은 일부 작업을 수행하여 느리게 실행합니다. 에서는 최적화 된 자바 펄린 노이즈 예 번호, 저자는 "(배열 접속 부재 접속보다 훨씬 느리다)"주석. 이런 종류의 것은 C ++ 배경에서 직관적으로 나오는 것입니다. 그러나 Java에서는 그러한 것들이 있습니다.

나는 총알 피하기를 멈추고 C ++을 배우고 사용한다고 말합니다.


1

게임 디자인을 강조하면서 컴퓨터 과학에서 정식 교육 (Bachelor 's of Science?)을받을 수있을 때까지 가장 잘 알고있는 언어로해야합니다. 장르를 받기 위해 게임을 사용할 수 있습니다. 특히 "공식적인 훈련없이 이걸 해냈어요"라고 말할 수 있다면

현대의 JVM은 심지어 Oracle의 JVM조차도 사람들이 여기에서 제기 한 문제를 해결하기위한 많은 기능을 가지고 있습니다. 다른 가비지 수집기를 사용하여보다 결정적인 가비지 수집기 동작을 얻을 수 있습니다. 3D 라이브러리에 대한 광범위한 경험이 없지만 Java3D에 대해서는 약간만 있지만 여기에 아무도 불평하지 않은 것 같습니다. 이스케이프 분석을 통해 잠금 제거 및 매우 짧은 수명의 개체를 훨씬 더 빠르고 무시할 수있는 할당 할 수 있습니다.

문제는 C ++의 Java를 선택하든 동시성을 올바르게 사용하는 방법을 배우고 메모리 관리를 잘 이해해야한다는 것입니다. 결국, 가능한 한 쉽게 나사로 조일 malloc수 있습니다 new. C ++ 용 도구가 무엇인지 모르겠지만 Java 용 프로파일 링 도구는 사용하기 쉽고 무료이며 IDE와 통합되어 있습니다. 그것들을 사용하여 성능 문제를 추적하고 배울 수 있습니다.


5
CS의 공식 교육은 모든 분야의 실제 프로그래밍 기술에 대한 가치가 있습니다. 나는 내 3 년차에 있다는 것을 알 것입니다.
DeadMG

4
DeadMG에 완전히 동의하지 않습니다. CS는 내가 좋아하는 과정을 졸업하고 고른 후 게임 개발 능력을 10 %에서 100 %로 끌어 올렸습니다. UI, 도해 법 등을 가르치지 않고 실제 실제 코딩을 가르쳐주었습니다.
ashes999

2
@ ashes999 : 그럼 운이 좋았습니다. 저의 과정은 무가치하며 같은 느낌을받는 다른 사람들도 많다는 것을 알고 있습니다.
DeadMG

2
@DeadMG 공부할 때 잘 보이지 않습니다. F / T 2 년을 일하고 다른 무료 기술을 배우면 알 수 있습니다. 나는했다. 그러나 어쩌면 나는 많은 관심을 기울이고 내 게임 개발자 취미에 모든 것을 적용하려고했습니다.
ashes999

1
학교와 교수에 따라 다릅니다. 나는 톤을 배운 몇 가지 훌륭한 프로그래밍 수업을 받았습니다. 실제로 참석하여 지식을 잃어버린 느낌이 들었습니다. 좋은 교수진이 있든 없든간에 IMO.
Nate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.