왜 게임 개발에 Java가 더 널리 사용되지 않습니까? [닫은]


77

저는 게임 개발자 나 다른 사람이 아니지만 Java가 게임 개발에 널리 사용되지 않는다는 것을 알고 있습니다. Java는 대부분의 게임에 충분히 빠르므로 어떻습니까? 몇 가지 이유를 생각할 수 있습니다.

  • Java에 대한 전문 지식이없는 게임 개발자 부족
  • 좋은 게임 개발 프레임 워크 부족
  • 프로그래머는 Java를 게임 프로그래밍 언어로 받아들이고 싶지 않습니다. 대부분 C ++ 만 허용합니까?
  • 게임 콘솔을 지원하지 않습니다 (PC 시장은 여전히 ​​존재하지만)

물론 다른 것일 수도 있습니다. 나보다 사업을 잘 아는 사람이 게임 개발에있어 왜 Java가 추진력을 얻지 못하는지 설명 할 수 있을까?


37
이제 "자바는 느리고 C ++은 빠르다"라는 답변이 너무 넓고 완전히 올바른 방식으로 문제의 표면에 닿아있을 때까지 기다립니다. 이런 방식으로 응답하는 사람들은 전문 게임 개발자가 아니라는 점에 유의하십시오.
Ed S.

20
실제로 Java 게임 개발에 사용됩니다. 즉, 모바일 시장에서. 자바 ME, 안드로이드.
user281377

21
왜 사용해야합니까? Java는 게임 개발자에게 무엇을 제공합니까? 더 널리 사용되는 언어에는 없는가? Java는 비즈니스 응용 프로그램 개발자에게 풍부한 풍부한 생태계를 제공하여 언어로서의 단점을 능가하지만 게임 개발과 관련하여 Java 플랫폼은 여러 대안에 비해 도구를 거의 제공하지 않습니다.
back2dos

14
흥미롭게도 Minecraft는 Java 기반입니다.
Uri

5
@Coder C ++ 코드가 많이 최적화 된 것 같지만 Java 코드는 그렇지 않은 것 같습니다. 따라서 잘못된 비교입니다.
이즈 카타

답변:


94

몇 가지 이유:

  • 예전에는 성능과 UI를 위해 "직접 액세스"가 필요했습니다. 이것은 Java 및 C #과 같은 VM 언어보다 우선합니다.
  • 대부분의 콘솔 (예 : 360, PS3)에는 JVM이 없으므로 PC 버전의 코드를 재사용 할 수 없습니다. 다양한 장치를 지원하기 위해 C ++ 코드를 컴파일하는 것이 훨씬 쉽습니다.
  • 대부분의 주류 게임 엔진 (예 : Unreal)에는 C ++ 바인딩이 있습니다. Java 커넥터 (예 : OpenGL 용)가 있지만 그와 비슷한 것은 없습니다.
  • PC 게임의 경우 DirectX는 실제로 강력한 Java 지원을 제공하지 않습니다.
  • 웹 기반 게임은 JavaScript 또는 Flash에서 실행됩니다. GWT와 같은 것을 사용하여 Java로 작성할 수 있습니다.
  • iPhone은 Objective-C 변형을 실행합니다.

Java는 요즘 Android 게임에서 주로 사용됩니다. 단순히 해당 플랫폼의 기본 언어이기 때문입니다.


14
+1 "대부분의 콘솔 (예 : 360, PS3)에는 JVM이 없으므로 PC 버전에서 코드를 재사용 할 수 없습니다. 다양한 장치를 지원하도록 C ++ 코드를 컴파일하는 것이 훨씬 쉽습니다"장치에 런타임이없는 경우 사용할 수없는 런타임을 기반으로 개발 된 게임은 표시되지 않습니다. Xbox 360과 Windows Phone은 .Net 런타임을 관리하므로이를 사용하여 게임을 개발할 수 있으며 점점 증가하는 추세입니다. 그러나 런타임은 다른 주요 플랫폼 (PS3 및 Wii)보다 훨씬 적기 때문에 완전히 별도의 코드베이스를 정당화하기가 어렵습니다. 실제로 성능 문제는 아닙니다.
JustinC

2
XNA라고하며 현재 .Net 2.0 프레임 워크의 하위 집합입니다. 다른 흥미로운 프레임 워크가 있습니다 : MonoXNA, MonoTouch 및 XnaTouch.
JustinC

7
JVM에서는 성능을 예측할 수 없습니다.
Klaim

5
아주 좋은 지적입니다. 그러나 GC가 예기치 않은 일시 중지 /로드를 유발할 수 있다는 사실을 추가했습니다. 이것이 서버 앱에 문제가되지 않으면 실시간 게임에 해당됩니다. 예를 들어 마인 크래프트에서 볼 수 있습니다.
deadalnix

2
@Klaim malloc또는로 도 가능하지 않으므로 new걱정이 되더라도 풀링을 구현할 것입니다. 이 시점과 관련이없는 Java의 큰 문제는 C #과 달리 값 유형을 지원하지 않는다는 것입니다.
Doval

80

기술적 이유 :

  • 최고의 3D 게임 엔진 은 대부분 C / C ++로 작성되었습니다. 대부분의 게임 개발자는 3D 엔진을 손상시키지 않고 처음부터 새로 작성하기를 원하지 않기 때문에 이것은 큰 문제입니다. Java에는 jMonkeyEngine 이 있으며 오픈 소스이며 실제로 는 훌륭 하지만 여전히 Unreal Engine 과 경쟁 할 수는 없습니다 .
  • 매우 드문 상황의 경우 , 특히 특수 하드웨어 기능에 액세스하기 위해 C 또는 어셈블리 언어로 "금속에 접근"하는 이점이 있습니다. 이것은 오늘날 중요하지 않지만, 전문 게임 개발자는 여전히 옵션을 갖고 싶어합니다 .....
  • Java에는 가비지 수집 , 관리 런타임이 있습니다. 99 %의 시간이 큰 이점인데, 이는 코딩을보다 쉽고 오류가 덜 발생하게하며 Java가 그렇게 인기있는 큰 이유 중 하나입니다. 그러나 가비지 수집주기 눈에 띄게 일시 중지 될 수 있으므로 게임에 가끔 대기 시간 문제가 발생합니다 . 새로운 대기 시간이 짧은 최신 JVM에서는 문제가되지 않지만 여전히 높은 FPS를 유지하는 것이 중요한 그래픽 중심 게임에서는 여전히 문제입니다.

기술적이지 않은 이유 :

  • 전문 게임 개발 하우스는 C / C ++ 기술과 기술에 많은 투자를하고 있습니다. 이것은 엄청난 양의 관성을 만듭니다 .
  • 크게 불합리한 인식 자바 그 속도가 느립니다. 당신은 확실히 자바와 수익성, 상업 3D 게임 쓸 수 있습니다 - 확실히 지금은 사실이 아니다, 90 년대 아마도 진정한 ( Runescape의의 ?에 대한 사람 또는 방법 마인 크래프트를 ?)
  • Java가 게임보다는 비즈니스 응용 프로그램 및 웹에 더 중점을 둔다는 꽤 공정한 인식 . 이는 모바일의 성장과 더 많은 플랫폼 간 개발의 필요성에 따라 변경 될 수 있지만 현재는 확실합니다.

흥미롭게도 게임 개발자 Java 고려해야하는 몇 가지 이유가 있습니다 .

  • 이식성 -대상 플랫폼의 수가 증가함에 따라 Java는 진정한 크로스 플랫폼 바이너리를 생성 할 수있는 최고의 기능으로 인해 점점 더 매력적입니다.
  • 라이브러리 에코 시스템 – 3D 게임 엔진을 제외하고 Java는 모든 플랫폼에서 가장 다양한 라이브러리를 보유하고 있습니다. 네트워킹, 사운드, AI, 이미지 처리, 키 / 값 데이터 저장소 등을 주제로하며 오픈 소스 Java 라이브러리가있을 수 있습니다.
  • 서버 측 개발 -Java는 서버를위한 훌륭한 언어 / 플랫폼이며, 더 많은 게임이 대규모 멀티 플레이어 요소를 통합함에 따라 서버 측이 점점 더 중요해질 것입니다. Linux의 Java는 여기에서 플랫폼으로 매우 매력적입니다.
  • JVM- 아마도 가비지 수집, JIT 컴파일러, 동시성 지원 등 환상적인 가비지 수집 기능을 갖춘 세계 최고의 엔지니어링 VM 실행 환경 일 것입니다. 더 나아질 것입니다. 최상의 런타임 환경.
  • 기타 JVM 언어 -Java는 탄탄한 작업량이지만 새로운 JVM 언어 (특히 Scala, Clojure)를 통해 실질적인 혁신이 이루어지고 있습니다. 이 언어는 Java / JVM 플랫폼의 모든 장점을 얻을, 플러스 그들은 매우 강력한 현대적인 언어입니다.

19
아니요, 비디오 게임 세계에서 Java의 protability가 더 나을 것은 없습니다. 대부분의 콘솔에는 JVM이 없습니다. 이식성 이유로 인해 비디오 게임 세계에서는 C ++이 Java보다 선호됩니다.
deadalnix

5
라이브러리 에코 시스템이 Java에 보너스 인 이유는 무엇입니까? 네트워킹, 사운드, 키-값 페어-그것은 중요하지 않습니다. 요즘 어디서나 가능합니다. 실제로 C / C ++ 라이브러리 (fann, OpenCV)를 사용하면 AI 및 이미지 처리가 훨씬 쉽다고 주장합니다.
MrFox

4
FPS보다 더 중요한 것은 일관된 프레임 속도를 강조하는 것입니다 . 게임을 100FPS로 실행할 수는 있지만 일부 프레임이 0.5 초 정도 걸리면 그렇지 않습니다. GC가 빠르더라도 눈에 띄는 불규칙성을 유발하면 여전히 문제가됩니다. (이것은 특히 Java의 성능, 아무것도 명심해야 할 일반적인 문제에 대해서는 언급하지 않습니다)
Gankro

1
Java로 1 인칭 슈팅 게임을 작성했으며 지연 시간이 짧은 것을 사용하지 않더라도 가비지 수집기에 아무런 문제가 없었습니다. 어쨌든 메모리가 Java 힙에 할당되지 않은 경우 가비지 수집기없이 메모리를 처리하는 것은 나에게 달려 있으며 대부분의 메모리 공간은 VBO에서 가져옵니다. 다시 말해서, 가비지 콜렉션은 그것이 설계된 용도로 사용될 때 작동하기 때문에 GPU 나 원시 힙 (! = Java 힙)에서 큰 오브젝트를 처리 할 수 ​​없기 때문에 문제가되지 않습니다. 양치질의 효율적인 수단이 아니라는 모루를 비난하지 마십시오.
gouessej

1
@deadalnix 비디오 게임 세계는 콘솔로만 구성된 것이 아닙니다.
gouessej

27

이 스레드에는 많은 잘못된 정보가 있습니다.

나는 게임 사업을 알 극도로 25 년 동안 거기에 있었던 것, 잘. 또한 게임에서 Java는 Sun의 Java Game 기술 전도사였으며 Java 성능 프로그래밍 전문가를 강하게 잘 알고 있습니다.

계산 속도 측면에서 Java는 오늘날 많은 과학 컴퓨팅 벤치 마크에서 C ++보다 뛰어납니다. 원하는 경우 성능이 좋지 않은 언어로 병리학 적 코드를 작성할 수 있지만, 전체적으로는 동등하며 오랫동안 사용되었습니다.

메모리 사용 측면에서 Java에는 오버 헤드가 있습니다. HelloWorld는 Java의 4K 프로그램입니다. 그러나 오늘날의 멀티 GB 시스템에서는 이러한 오버 헤드가 의미가 없습니다. 마지막으로 Java에는 더 많은 시작 시간이 있습니다. 유닉스 커맨드 라인 명령과 같은 짧은 런타임 유틸리티에는 Java를 사용하지 않는 것이 좋습니다. 이 경우 시동이 성능을 지배합니다. 그러나 게임에서는 상당히 초기 단계입니다.

올바르게 작성된 Java 게임 코드는 GC 일시 중지를 겪지 않습니다. C / C ++ 코드와 마찬가지로 활성 메모리 관리가 필요하지만 C / C ++ 수준에서는 그렇지 않습니다. 수명이 긴 오브젝트 (전체 레벨 또는 게임에 지속됨) 및 매우 짧은 수명이있는 오브젝트 (벡터 등의 계산 및 전달 후 빠르게 파괴됨)에 대한 메모리 사용량을 유지하는 한 gc는 눈에 띄는 문제가 아닙니다.

직접적인 메모리 액세스의 관점에서 자바는 오랜 기간 동안 그것을 가지고 있었다. Native Direct Byte Buffers 형태의 Java 1.4부터. Java에서 비트 twiddling은 부호없는 정수 유형이 없기 때문에 약간 성가신 일이 될 수 있지만 작업 라운드는 모두 잘 알려져 있으며 끔찍하지 않습니다.

진정한 Java에는 Direct3D 바인딩이 없었지만 Java 기술은 이식성을 위해 노력하기 때문입니다. 그것은 두 개의 OpenGL 바인딩 (JOGL 및 LWJGL) 및 OpenAL 바인딩 (JOAL)과 Windows의 DirectInput, OSX의 HID 관리자 및 Linux 바인딩 (나는 어느 것을 잊어 버린다)에 후드 아래에 바인딩하는 휴대용 입력 바인딩 (JInput)을 가지고 있습니다.

Unity가 C #을 특징으로하는 완전한 게임 엔진이 Java를 특징으로하지 않았으며 이는 독립된 공간의 약점입니다. 다른 한편으로, Windows, OSX 및 Linux에서 완전히 플랫폼 이식성이 뛰어난 2 개의 우수한 Scenegraph 레벨 API가있었습니다. Josh Slack이 작성한 첫 번째는 JMonkey 엔진과 두 번째 Ardor3D입니다.

최고의 포스터는 게임 개발에서 Java를 유지했던 가장 큰 두 가지 요소가 편견과 이식성 이었다는 것입니다. 후자가 가장 큰 문제였습니다. Java 게임을 작성하여 Windows, OSX 및 Linux에 제공 할 수는 있지만 콘솔 VM은 없었습니다. 이것은 Sun 중간 관리에서 전체가 부적절했기 때문입니다. 게임에서 Java를 사용하는 소수의 사람들은 실제로 Sony와 3 번 이상 플레이 스테이션에서 VM을 얻기 위해 3 번의 거래를했으며 Sun의 중간 관리자가 3 번의 죽임을당했습니다.

썬은 클라이언트 기술을 사용했지만 썬 관리는 소비자 제품을 얻지 못했다는 사실이 중요합니다. 그렇기 때문에 Sun의 클라이언트 언어 인 Java가 어떤 형태로도 성공하지 못한 이유는 무엇이며, Java와 플랫폼을 Java로 만드는 데 Google과 Dalvik (Android Java와 같은 VM)이 필요한 이유입니다.

이것이 바로 오늘 C #으로 게임을 코딩하는 이유입니다. 모노가 썬 경영진이 거부 한 곳으로 갔기 때문입니다.


8

Java는 안정적으로 실행되어야하는 비즈니스 로직, 서버 및 플랫폼 독립적 인 코드에 적합합니다. 게임에서 Java가 자주 사용되지 않는 몇 가지 요인이 있습니다.

  • 경계 점검 및 기타 안전 메커니즘 (요즘 한계 성능 차이)
  • C ++ 데이터 구조와 Java 데이터 구조간에 변환해야 함 (버퍼간에 메모리를 복사 할 수 없음)
  • 많은 책과 튜토리얼이 군중을 따르므로 C ++ 이외의 게임 개발자 정보를 찾기가 어렵습니다.
  • 핵심 그래픽 라이브러리 (DirectX 및 OpenGL)와 많은 상용 엔진은 C / C ++ 기반
  • 많은 게임이 가능한 한 빨리 실행되어 시각적으로 매력적인 기능을 추가 할 수 있습니다.

Java (JNI 계층 작성) 및 .net (많은 마샬링 / 비 정렬 화, api / 구조 속성)과 같은 바이트 코드 언어의 C ++ 라이브러리로는 작업하기가 쉽지 않습니다. 따라서 약간의 이익을 위해 약간의 작업이 추가됩니다.

참고 : 일부 게임 서버는 Java를 사용합니다.

비슷한 게시물 여기에 : https : //.com/questions/1034458/why-arent-video-games-written-in-java


JNI를 직접 작성할 필요는 없으며 JogAmp 또는 이와 유사한 라이브러리를 사용하십시오.
gouessej

좋은 지적. Java에서 JOGL 및 JMonkeyEngine을 사용했습니다. C #에서 nvorbis / naudio / openal과 함께 XNA / MonoGame을 DirectX로, OpenTK를 OpenGL로 사용했습니다. 또한 셰이더로 작업 할 때 중소형 게임에 적합합니다. C ++보다 생산성이 크게 향상되었습니다. 그런 다음 당신의 유일한 진짜 문제는 GC 기반 언어와 동일합니다 : GC의 완화 / 방지 할 수있다. 프레임 속도가 주기적으로 스톨되므로 게임 플레이가 멈췄을 때 고정 가능한 크기의 배열, 정적 할당 또는 오래 살 수있는 버퍼 (메뉴, 로딩, 시네마틱)가 필요합니다.
Graeme Wicksted

2006 년부터 JOGL을 사용해 왔으며 데스크톱 환경의 매우 낮은 수준의 하드웨어에서도 이런 종류의 문제는 발생하지 않았습니다. 가비지 수집기는 가장 큰 객체가 종종 GPU RAM 또는 기본 힙 (일반적으로 직접 NIO 버퍼)에 있고, 전자는 "정상"가비지 수집에 의해 관리되지 않으며 후자는 "가중"이므로 비난하지 않습니다. Java 힙에서 Java 객체를 처리하므로 "일반"가비지 수집에 의해 직접 관리되지 않습니다. 기본 힙에 할당 된 메모리를 효율적으로 해제하는 것은 개발자의 몫입니다.
gouessej

겸손한 의견으로는 문제는 가비지 수집기가 작업을 수행하지 못하게하는 Java 사고 방식이 아닌 프로그래머가 상상 한 일부 "최적화"에서 비롯됩니다. 일부 원시 자원에 링크 된 쓸모없는 일부 Java 오브젝트에 대한 강력한 참조를 유지하면 가비지 콜렉터는이를 회수 가능한 것으로 간주하지 않습니다. 힙이없는 할당은 경우에 따라 유용 할 수 있지만 남용하는 경우 오래 지속되는 리소스가 메모리에 남아 새 개체를 만들 수 없습니다.
gouessej

일부 게임 프로그래머는 처음에 거대한 버퍼를 할당하여 런타임에 슬라이스하고이 메모리를 자체적으로 관리하는 것을 선호하지만 운영 체제가 더 나빠지면 Java가 새로운 오브젝트를 작성하기 위해 약간의 공간을 확보하는 데 많은 시간을 소비하게됩니다. Java에서 메모리 누수를 피하는 것은 어렵지 않으며보다 효과적인 솔루션은 Java 힙에 메모리가 할당되지 않은 객체 만 추적하여 적절한 시간에 릴리스합니다 (일시 정지 중에 레벨에서 다른 레벨로 전환 할 때) ...) 가비지 수집기와는 아무런 관련이 없습니다.
gouessej

5

Java는 대부분의 게임 개발에 충분하지 않습니다. 표준 인 C ++ / Assembly를 사용하는 것보다 훨씬 느립니다. 더 많은 게임 개발이 C # 또는 VB를 사용하여 수행되지 않는 것과 같은 이유입니다. 게임 개발자는 물리 계산, AI 논리 및 환경 상호 작용과 같은 것들을 위해 사용할 수있는 모든 마지막 클록주기를 필요로하고 계획합니다.

간단한 게임의 경우 Java를 매우 효과적으로 사용할 수 있습니다. Tetris 클론이나 Bejeweled 또는 그와 같은 수준의 세부 사항을 만들려면 Java가 정상적으로 작동합니다. 그러나 Java는 Halo, Medal of Honor, Command & Conquer 등과 같은 게임을 만들어 재생할 수 없습니다. 적어도 오늘날에는 존재합니다.

질문에 기재 한 이유도 유효합니다. Java 전문 지식을 갖춘 게임 개발자가 없다는 점을 제외하고는 생각합니다. 휴대 전화 및 기타 휴대용 장치의 많은 게임은 Java (대부분의 Android 게임 포함)로 작성되며 일부 게임은 매우 우수합니다. Java 지식이있는 게임 개발자의 기반이 적절하고 성장하고 있다고 생각합니다.

고급 게임 중 일부에 이러한 고급 언어를 사용하는 능력에 대한 생각이 바뀌고 있습니다. 예를 들어, 내가 가장 좋아하는 게임 중 하나 인 Auran 's Train Simulator는 C #으로 많은 부분으로 작성되었으며 꽤 잘 작동합니다. 따라서 기지가 성장하고 계속 발전 할 것입니다.


17
가장 중요한 점 중 하나를 생략하십시오. 대부분의 도구와 API는 C ++로 작성되었으며 Java 또는 다른 언어로 작동하도록 다시 작성하는 것은 많은 작업이 될 것입니다. 또한 "[Java가 C ++ / 어셈블리를 사용하는 것보다 훨씬 느립니다"라는 일반화 가 너무 광범위하여 정확하지 않습니다. 좋은 컴파일러는 어셈블러를 작성하는 것보다 더 효율적인 코드를 생성 할 수 있기 때문에 PC 게임에서 생각하는 것처럼 어셈블리가 자주 사용되지 않습니다. 그러나 결정적인 리소스 사용과 하드웨어를 바로 잡을 수있는 능력이 필요합니다.
Ed S.

15
누군가는 실제로 Minecraft보다 더 나은 Java 기능의 예를 만들어야합니다. 누군가가 Java 또는 C #에서 WoW, C & C 또는 MOH 또는 Starcraft에 해당하는 것을 만들 때까지 내가 말한 것을 계속 유지할 것입니다.
BBlake

12
"좋은 컴파일러는 어셈블러를 작성하는 것보다 더 효율적인 코드를 생성 할 가능성이 높기 때문에 PC 게임에서 생각하는 것처럼 어셈블리가 자주 사용되지 않습니다." 그것은 또 다른 일반화입니다. 숙련 된 IA32 어셈블리 언어 프로그래머보다 더 나은 IA32 기계 언어를 생성 할 수있는 것보다 컴파일러를 아직 보지 못했습니다. 컴파일러는 대상 시스템에 매핑 된 추상 시스템의 코드를 생성합니다. 어셈블리 언어 프로그래머는 기계 숙어를 포함하여 기본 프로세서를 최대한 활용합니다.
비트 트위 들러

10
메모리 사용량을 잊지 마십시오. 속도보다 메모리 사용이 더 중요 할 것입니다. Java는 C ++과 같은 직접 메모리 제어를 위해 설계되지 않았으며 가비지 수집기는 동일한 작업에서 메모리 사용이 항상 C ++보다 훨씬 높다는 것을 의미합니다.
Matthew 읽기

9
이것은 1985 년이 아닙니다. 640k 이상의 메모리, 50mghz 이상의 프로세서 및 1.44MB 이상의 이동식 저장 장치가 있습니다. 오늘날 게임 개발자의 도전은 25 년 전과 같지 않습니다. 계속해서 현대 게임을 위해 손으로 만들어진 x86 또는 ia64 코드의 예를 찾으십시오. 어떤 신화는 명백한 잘못이다. 문제는 이식성과 비교적 오래된 운영 환경을 사용하는 하위 수준의 클라이언트입니다. 최소 공통 분모 대 강력한 이머전스.
JustinC

5

현대 게임은 모두 특수 목적 하드웨어에서 발생하는 3D 그래픽에 관한 것입니다.

2002 년에도 Jacob Marner는 "게임 개발을위한 Java 평가"보고서에서 Java가 성능에 가장 의존적 인 부분을 제외하고 게임의 언어에 강하고 언어가 저렴하고 기본 JVM이 저렴하다는 점을 제외하면 게임에 매우 유용하다는 것을 발견했습니다. 이렇게하면됩니다.

http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

특히 3D 그래픽에서 진행된 진보와 OpenGL 등에 대한 우수한 바인딩으로 인해 이러한 단점이 오늘날 덜 두드러진다는 것이 개인적 견해입니다.

따라서 문제는 다른 곳에 있어야합니다. Java 런타임의 크기 (요즘 멀티 DVD 게임에서는 문제가 훨씬 적음)와 기존 코드의 관성이 원인 일 수 있습니다. Java에서 원시 코드로 작업을 시작하는 것은 매우 어렵다. 세 번째 이유는 게임을하는 스타 개발자들이 익숙한 것입니다. 네 번째는 Java가 플랫폼에서 사용 가능한지 여부입니다.

한 가지 확실한 점은 대부분의 게임이 처음부터 C 코드로 레코딩되는 대신 스크립팅 가능으로 전환하고 있으며 스크립팅 언어 아래에서 최고의 런타임을 원한다는 것입니다. 요즘 이것은 본질적으로 CLR 또는 JVM을 의미합니다.


1
oddlabs.com/technology.php- "우리는 LWJGL과 Java의 조합에 기반한 개발을 기반으로했으며 게임을 수정하지 않고 플랫폼 종속 네이티브 코드와 비슷한 속도로 LWJGL 지원 플랫폼에서 실행할 수 있습니다."

Jake2는 10 년 전에 Quake2보다 성능이 뛰어났습니다. 우리는 2002 년에 더 이상 것 없다
gouessej

4

게임 개발자는 금속에 가까이 있기를 좋아하며 종종 어셈블리에 단단한 내부 루프를 작성합니다. Java는 일관된 속도 또는 메모리 사용 측면에서 동일한 수준의 성능을 제공하지 않습니다 (JIT를 실행하면 비용이 많이 듭니다).


4

대부분의 사람들에게 제한 요소는 훌륭한 게임 엔진의 가용성이 부족하다고 생각합니다. 멀리 가기 위해서는 왜 그것들을 사용할 수 없는지 살펴 봐야합니다.

나는 잠시 다른 방향에서 그것을 볼 것입니다. 예를 들어 게임 엔진을 개발하는 것은 많은 작업입니다. 시간과 노력을 투자 할 사람을 개발하면 누가 유익을 얻을 수 있습니까?

Java에서의 프레임 워크와 같은 개발 (예 : IBM, Oracle)에 대한 대부분의 명백한 후보는 게임에 관심이없는 것 같습니다. 게임 개발의 명백한 후보자 (예 : Id, EA)는 Java에 거의 관심이 거의없는 것 같습니다.

내가 생각할 수 있는 거의 유일한 후보는 구글 일 것이다. Android의 기본 개발 언어는 Java이며 Android 용 게임 개발을 장려 하면 플랫폼에 실질적인 이점을 제공 할 수 있습니다.

내가 아는 한, 그들은 그렇게하지 않았지만 (아직?), 거의 모든 다른 사람에게 꽤 심각한 한계를 남깁니다. 현대의 고성능 게임 엔진이 Java에서 개발을 사용하는 방법이 거의 없다면, 추가 작업에 대한 대가로 많은 이점을 얻을 수있는 전망이 거의없는 상당히 많은 추가 작업이 필요합니다.


나는 당신이 게임 엔진에서 중요한 문제를 겪었다 고 생각합니다. 이것이 Java가 C / C ++를 따라 가지 않은 가장 큰 이유라고 생각합니다. 오픈 소스가 경기장의 레벨을 약간 올릴 수도 있습니다. jMonkeyEngine ( jmonkeyengine.com )에 깊은 인상을 받았습니다 .
mikera

게임 개발자는 전반적으로 (기술적으로) 매우 보수적이며 영향력있는 대규모 상점은 수십 년 동안 존재 해 왔으며 C (++) / ASM 중심이므로 Java 개발에 투자하지 않을 것입니다. 전체 C (++) / ASM 아키텍처를 사용할 준비가 되었으면 시간, 돈 및 기타 리소스에 대한 막대한 투자가 필요하다는 의미입니다.
jwenting

1

문제는 다음 줄에 무언가를 묻는 것과 같습니다.

자동차, 보트 엔진 또는 제트 엔진에 전원을 공급하는 것이 더 좋습니다.

확장 성, 버그 방지, 속도, 메모리 서명, 모듈성 및 모든 것들이 있습니다. 문제는 산업 표준으로서 무엇이 더 나은지에 관한 것이 아니고, 당신이 알고있는 것과 잘 알고있는 것과 같이 "나에게 더 좋은 것이"라는 것이어야합니다. 그것이 일을하면 그 일을합니다. 실제로 아이디어를 팔 수 있다면 아이디어가 작동하며 누가 숟가락을 구부릴 수도 있습니다.


0

자바는 게임 개발을 염두에두고 제작 된 것이 아니라 "웹용 언어"가되도록 만들어졌다.

게임 개발과 관련하여 Sun은 Microsoft가 C #을 지원하는 게임 개발 언어로 Java를 실제로 지원하지 않았습니다.

필자는 매력적인 게임 개발 프레임 워크의 부족이이 측면에서 Java를 실제로 죽인 것이라고 생각합니다.


3
그러나 C ++는 게임 언어로 만들어지지 않았지만 C와 같은 시스템 프로그래밍 언어로 만들어졌습니다. Sun은 실제로 게임 언어로 Java에 대해 약간의 노력을 기울였습니다. 무언가, 그러나 그것은 결코 일어나지 않았다 ...
Anto

1
@Phobia : 그러나 시스템 프로그래밍 을 위해 설계되었습니다 .
Anto

1
@Phobia : 나는 말하고 가 있다는 것입니다 범용 프로그래밍 언어 ++ 단지 C처럼. 귀하의 답변에 따르면 Java는 게임 프로그래밍 언어로 설계되지 않았지만 C ++도 그렇게 설계되지 않았다는 것을 잊어 버렸습니다.
Anto

2
@Joe Blow : Wikipedia 페이지에서 C에 대해 : " C는 시스템 소프트웨어를 구현하도록 설계 되었지만 휴대용 응용 프로그램 소프트웨어 개발에도 널리 사용됩니다." 나는 그것이 분명하다고 생각하지 않습니까?
Anto

2
@Phobia 개인 취향에 대해 죄송하지만 토론과는 전혀 관련이 없습니다. 또한 요즘 C ++이 거의 독점적으로 응용 프로그램 프로그래밍에 사용된다는 주장을하고 싶지 않습니다. 이것은이 토론에 관한 것이 아닙니다. Java가 웹 프로그래밍을 염두에두고 설계되었다는 귀하의 주장. C ++은 시스템 프로그래밍을 염두에두고 설계되었습니다. 디자이너를 말합니다. 토론 끝.
Konrad Rudolph

-1

새로운 비 전통적인 하드웨어 및 드라이버에 C를 더 직접 접착하는 것이 더 쉽습니다. 게임 프로그래머가 하드웨어에 더 빨리 접근할수록 경쟁 게임보다 더 나은 사양을 지정할 수 있습니다. 나중에 게임 프로그래머는 이전에 입증 된 게임과 동일한 방법론과 도구를 사용합니다.

일반 휴대 전화 게임과 같이 최신 하드웨어에 대한 최적화가 중요하지 않은 게임의 경우 이러한 방식으로 C를 사용하는 것이 Java의 뛰어난 이식성보다 덜 중요합니다.


-4

어떤 사람들에게는 이유가 속도, 라이브러리 또는 가용성과 관련이 없습니다. 그것은 언어 자체 때문입니다. 어떤 사람들은 단순히 Java 언어를 좋아하지 않습니다. 다른 사람들은 자바를 사용하여 게임을 만드는 대신 자신이 좋아하는 프로그래밍 언어를 사용합니다.


이것은 댓글처럼 더 읽습니다. 답변하는 방법
gnat

-8

물론 다른 것일 수도 있습니다. 나보다 사업을 잘 아는 사람이 게임 개발에있어 왜 Java가 추진력을 얻지 못하는지 설명 할 수 있을까?

해석 언어, 즉 느립니다. 하드웨어 인 그래픽 및 그래픽 카드를 다루고 있습니다. 하드웨어를 다루기에 좋은 언어는 무엇입니까? 글쎄, C ++, 그것은 꽤 낮으며, 당신은 포인터 등을 다룬다.

크라이시스와 같은 미친 그래픽과 그것을 위해 자바를하지 않을 모든 것을 펌핑하고 싶다면.

뿐만 아니라 오라클은 Java를 소유하고 있으며, 회사가 귀하를 고소 할 수 있다고 생각하는 것은 대담하지 않습니다. 특히 조각화 FUD로 인해 소송을 제기하지 않고 게임을 목표로하기 위해 JAVA에 대한 자체 통역사를 구축하려는 경우.


1
JIT 컴파일에 대해 진지하게 읽고 Java가 C ++에 반대되는 벤치 마크를 살펴보십시오
Anto

1
도대체 누가이 답변에 투표 했습니까? 이 모든 질문은 엄청나게 말도 안됩니다! 맙소사.
Fattie

7
@ 조 대답이 잘못되었습니다. Java는 해석되지 않습니다.
Konrad Rudolph

3
@Anto 바보 같은 벤치 마크는 잊어 버리세요. C ++ Java보다 훨씬 빠릅니다 . programmers.stackexchange.com/questions/29109/29136#29136programmers.stackexchange.com/questions/368/13888#13888을 참조하십시오 .
Konrad Rudolph

1
@Anto 무엇을 보려고합니까? 속도? C ++. 메모리 사용량? C ++. 마인 크래프트를보고 서버 호스팅을 시도하여 게임이 차지하는 메모리 양을 확인하십시오. Java는 C ++보다 훨씬 많은 메모리를 소비합니다. 온라인 게임을 만들 때 Java에서는 매우 어렵다고 생각합니다. 지금까지 보았던 모든 벤치 마크는 더 많은 메모리를 소비하므로 이제 중앙 서버가 Java로 코딩 된 MMORPG 게임이 메모리 측면을 무시하거나 MMORPG에서 대규모의 정의를 변경하는 경우에만 좋습니다.
신화 프로그래머
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.