it-swarm-vi.com

Tại sao không Java được sử dụng rộng rãi hơn để phát triển trò chơi?

Tôi không phải là nhà phát triển trò chơi hay bất cứ điều gì, nhưng tôi biết rằng Java không được sử dụng rộng rãi để phát triển trò chơi. Java nên đủ nhanh cho hầu hết các trò chơi Vì vậy, bắt ở đâu? Tôi có thể nghĩ ra một số lý do:

  • Thiếu các nhà phát triển trò chơi có chuyên môn về Java
  • Thiếu khung phát triển trò chơi tốt
  • Các lập trình viên không muốn chấp nhận Java làm ngôn ngữ lập trình trò chơi. Hầu hết chỉ chấp nhận C++ như vậy?
  • Không hỗ trợ bảng điều khiển trò chơi (mặc dù thị trường PC vẫn tồn tại)

Nó tất nhiên có thể là một cái gì đó khác. Ai đó có thể hiểu rõ hơn về doanh nghiệp hơn tôi có thể giải thích tại sao Java không có được động lực khi phát triển trò chơi?

81
Anto

Nhiều lý do:

  • Ngày xưa, bạn cần "truy cập trực tiếp" cho hiệu suất và giao diện người dùng. Điều này có trước VM ngôn ngữ như Java và C #.
  • Hầu hết các bảng điều khiển (ví dụ: 360, PS3) không có JVM, vì vậy bạn không thể sử dụng lại mã từ phiên bản PC. Việc biên dịch mã C++ để hỗ trợ các thiết bị khác nhau sẽ dễ dàng hơn nhiều.
  • Hầu hết các công cụ trò chơi chính thống (ví dụ: Unreal) có các ràng buộc C++. Có một số trình kết nối Java (ví dụ: đối với OpenGL) nhưng không có gì giống như vậy.
  • Đối với chơi game trên PC, DirectX không thực sự có mạnh Java (nếu có).
  • Các trò chơi dựa trên web chạy bằng JavaScript hoặc Flash. Bạn có thể viết chúng vào Java mặc dù sử dụng những thứ như GWT.
  • IPhone chạy một biến thể Objective-C.

Java chủ yếu được sử dụng trong Android trò chơi ngày nay, đơn giản vì đó là ngôn ngữ chính cho nền tảng đó.

95
Uri

Lý do kỹ thuật:

  • Hầu hết các công cụ trò chơi 3D tốt nhất được viết bằng C/C++. Đây là một vấn đề lớn, vì hầu hết các nhà phát triển trò chơi không muốn thỏa hiệp trên công cụ 3D của họ, nhưng họ cũng không muốn viết từ đầu. Java có jMonkeyEngine là nguồn mở và thực sự thực sự tốt nhưng nó vẫn chưa thể cạnh tranh với Động cơ không thực .
  • Đối với một số trường hợp rất hiếm gặp, có những lợi thế khi nhận "gần với kim loại" bằng ngôn ngữ C hoặc hội, đặc biệt để truy cập vào các tính năng phần cứng đặc biệt. Điều này không quá quan trọng hiện nay, nhưng các nhà phát triển game chuyên nghiệp vẫn muốn có tùy chọn .....
  • Java có rác được thu thập , thời gian chạy được quản lý. 99% thời gian này là một lợi thế rất lớn, nó chắc chắn làm cho việc mã hóa dễ dàng hơn và ít bị lỗi hơn và là một trong những lý do lớn tại sao Java rất phổ biến. Tuy nhiên, nó gây ra độ trễ không thường xuyên vấn đề đối với các trò chơi khi chu kỳ thu gom rác có thể gây ra tạm dừng đáng chú ý. Điều này đang trở thành một vấn đề với các JVM có độ trễ thấp mới hơn, nhưng vẫn là một vấn đề đối với các trò chơi chuyên sâu về đồ họa trong đó việc duy trì FPS cao là rất quan trọng.

Lý do phi kỹ thuật:

  • Các nhà phát triển trò chơi chuyên nghiệp đang đầu tư vào các kỹ năng và công nghệ C/C++. Điều này tạo ra một lượng lớn quán tính .
  • Nhận thức phần lớn mà Java là chậm. Có thể đúng trong những năm 90, chắc chắn không phải bây giờ - bạn chắc chắn có thể đúng viết một trò chơi 3D thương mại có lợi nhuận với Java ( Runescape bất cứ ai? Hoặc làm thế nào về Minecraft ?)
  • Một nhận thức khá công bằng mà Java tập trung nhiều hơn vào các ứng dụng kinh doanh và web thay vì chơi game. Điều này có thể thay đổi với sự phát triển của Mobile và nhu cầu phát triển đa nền tảng nhiều hơn, nhưng hiện tại chắc chắn là đúng.

Điều thú vị là cũng có một số lý do chính đáng tại sao các nhà phát triển trò chơi nên xem xét Java:

  • Tính di động - khi số lượng nền tảng đích tăng sinh, Java ngày càng trở nên hấp dẫn hơn với khả năng tuyệt vời của nó tạo các nhị phân đa nền tảng thực sự
  • Hệ sinh thái thư viện - với ngoại lệ rất quan trọng của công cụ trò chơi 3D, Java có phạm vi thư viện tốt nhất trong tổng số nền tảng. Mạng, âm thanh, AI, xử lý hình ảnh, lưu trữ dữ liệu khóa/giá trị, bạn đặt tên cho chủ đề và có thể có một thư viện mã nguồn mở Java cho nó.
  • Phát triển phía máy chủ - Java là một ngôn ngữ/nền tảng tuyệt vời cho máy chủ và khi nhiều trò chơi kết hợp nhiều khối các phần tử trình phát phía máy chủ sẽ ngày càng trở nên quan trọng hơn. Java trên Linux trông khá hấp dẫn ở đây như một nền tảng.
  • JVM - có lẽ là môi trường thực thi tốt nhất VM môi trường thực thi trên thế giới, với bộ sưu tập rác tuyệt vời, trình biên dịch JIT, hỗ trợ đồng thời, vv Nó sẽ trở nên tốt hơn và khi các nhà phát triển trò chơi bắt đầu sử dụng các ngôn ngữ động trong các trò chơi của họ, họ sẽ muốn có môi trường thời gian chạy tốt nhất có thể.
  • Các ngôn ngữ JVM khác - Java là solid od workhorse, nhưng thực tế sự đổi mới đang diễn ra với các ngôn ngữ JVM mới (đặc biệt là Scala, Clojure). Các ngôn ngữ này có được tất cả các lợi thế của nền tảng Java/JVM, plus chúng là những ngôn ngữ hiện đại cực kỳ mạnh mẽ.
81
mikera

Được rồi, có rất nhiều thông tin sai trong chủ đề này.

Tôi biết kinh doanh trò chơi cực kỳ tốt, đã ở trong đó 25 năm. Tôi cũng biết Java trong các trò chơi cực kỳ tốt là Sun's Java Nhà truyền giáo kỹ thuật trò chơi và giảng bài Java.

Về tốc độ tính toán, Java đánh bại C++ trong nhiều điểm chuẩn tính toán khoa học ngày nay. Bạn có thể viết mã bệnh lý bằng một trong hai ngôn ngữ hoạt động kém nếu bạn muốn, nhưng trên hết, chúng ngang bằng và đã được một thời gian dài.

Về mặt sử dụng bộ nhớ, Java có phần vượt trội. HelloWorld là chương trình 4K trong Java. Nhưng chi phí đó khá vô nghĩa trong các hệ thống nhiều GB ngày nay. Cuối cùng, Java có nhiều thời gian khởi động hơn. Tôi không khuyên bạn nên sử dụng Java cho các tiện ích thời gian ngắn như các lệnh dòng lệnh Unix. Trong những trường hợp đó, khởi động sẽ chi phối hiệu suất của bạn. một trò chơi, tuy nhiên, nó khá khó hiểu.

Được viết đúng Java mã trò chơi không bị tạm dừng GC. Giống như mã C/C++, nó yêu cầu một số quản lý bộ nhớ hoạt động nhưng không đến cấp độ C/C++. Miễn là bạn giữ việc sử dụng bộ nhớ cho các đối tượng tồn tại lâu dài (tồn tại trong toàn bộ cấp độ hoặc trò chơi) và các đối tượng sống rất ngắn (vectơ và như vậy, được truyền xung quanh và nhanh chóng bị phá hủy sau khi tính toán) gc không phải là vấn đề có thể nhìn thấy.

Về mặt truy cập bộ nhớ trực tiếp, Java đã có điều đó trong một thời gian dài; kể từ Java 1.4 dưới dạng Bộ đệm Byte trực tiếp gốc. Bit twiddling in = Java có thể hơi khó chịu do thiếu các kiểu số nguyên không dấu nhưng các vòng công việc đều được biết đến và không quá tệ.

Mặc dù Java chưa bao giờ có ràng buộc Direct3D, nhưng đó là vì Java công nghệ phấn đấu cho tính di động. Nó có các ràng buộc TWO OpenGL (JOGL và LWJGL) và liên kết OpenAL (JOAL) và một ràng buộc đầu vào di động (JInput) liên kết dưới mui xe với DirectInput trên Windows, HID Manager trên OSX và ràng buộc Linux (tôi quên cái này).

Đúng là không có công cụ trò chơi hoàn chỉnh nào có tính năng Java theo cách nói của Unity, có tính năng C # và đó là một điểm yếu trong không gian độc lập. Mặt khác, có hai APIS cấp độ Kịch bản tốt đó hoàn toàn là nền tảng di động trên Windows, OSX và Linux. Cả hai được viết bởi Josh Slack, đầu tiên được gọi là công cụ JMonkey và Ardor3D thứ hai.

Áp phích trên cùng là chính xác rằng hai điều lớn nhất đã nắm giữ Java trở lại trong quá trình phát triển trò chơi là định kiến ​​và tính di động. Cái sau là vấn đề lớn nhất. Mặc dù bạn có thể viết Java trò chơi và gửi nó trên Windows, OSX và Linux, không bao giờ có máy ảo console. Điều này là do sự thiếu hiểu biết trong quản lý trung gian của Sun. Vài người trong chúng tôi làm việc với Java trong các trò chơi thực sự đã có thỏa thuận với Sony không dưới 3 lần để có được VM trên PlayStation và cả 3 lần quản lý cấp trung của Sun đã giết chết nó.

Trong khi Sun tán tỉnh các công nghệ của khách hàng, thực tế của vấn đề là quản lý của Sun không bao giờ có sản phẩm tiêu dùng. Đó là lý do tại sao Java là ngôn ngữ máy khách từ Sun không bao giờ thành công dưới bất kỳ hình thức nào và tại sao phải mất Google và Dalvik (máy ảo Android giống như Java) để tạo ra Java một nền tảng thành công ở bất cứ đâu.

Và đó là lý do tại sao tôi viết mã trò chơi trong C # ngày hôm nay. Bởi vì Mono đã đi nơi quản lý của Sun từ chối.

29
user430788

Java rất tốt cho logic nghiệp vụ, máy chủ và mã độc lập nền tảng phải chạy đáng tin cậy. Có một số yếu tố tại sao Java thường không được sử dụng trong các trò chơi:

  • kiểm tra giới hạn và các cơ chế an toàn khác (chênh lệch hiệu suất cận biên ngày nay)
  • phải chuyển đổi giữa các cấu trúc dữ liệu C++ và Java cấu trúc dữ liệu (không thể sao chép bộ nhớ giữa các bộ đệm)
  • nhiều sách và hướng dẫn đi theo đám đông nên rất khó tìm thấy thông tin nhà phát triển trò chơi không phải C++
  • các thư viện đồ họa cốt lõi (DirectX và OpenGL) và nhiều công cụ sẵn có dựa trên C/C++
  • nhiều trò chơi cố gắng chạy nhanh nhất có thể để chúng có thể thêm các tính năng hấp dẫn trực quan hơn

Thật không dễ dàng để làm việc với các thư viện C++ từ các ngôn ngữ mã byte như Java (viết một lớp JNI) và .net (rất nhiều thuộc tính marshalling/unmarshalling, api/architecture). một chút công việc cho lợi ích nhỏ.

Một lưu ý phụ: một số máy chủ trò chơi sử dụng Java.

Bài đăng tương tự ở đây : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in- Java

9
Graeme Wicksted

Java không đủ nhanh để phát triển trò chơi. Nó chậm hơn nhiều so với sử dụng C++/hội, đây là tiêu chuẩn. Đó là cùng một lý do phát triển trò chơi nhiều hơn không được thực hiện bằng C # hoặc VB. Các nhà phát triển trò chơi cần và lập kế hoạch cho mỗi chu kỳ đồng hồ cuối cùng mà họ có thể thực hiện cho những việc như tính toán vật lý, logic AI và tương tác môi trường.

Đối với các trò chơi đơn giản hơn, Java có thể được sử dụng khá hiệu quả. Nếu bạn muốn tạo một bản sao Tetris hoặc Bejeweled hoặc một cái gì đó khác ở mức độ chi tiết đó, thì Java sẽ hoạt động tốt. Nhưng Java không thể tạo các trò chơi như Halo, Medal of Honor, Command & Conquer, v.v. và làm cho nó có thể chơi được. Ít nhất là nó tồn tại ngày nay.

Và những lý do bạn liệt kê trong câu hỏi của bạn là hợp lệ là tốt. Ngoại trừ, tôi nghĩ, đối với việc thiếu các nhà phát triển trò chơi có chuyên môn Java. Nhiều trò chơi trên điện thoại và các thiết bị di động khác được viết bằng Java (bao gồm hầu hết các trò chơi Android) và một số trò chơi khá xuất sắc. Vì vậy, tôi nghĩ rằng có một cơ sở tốt cho các nhà phát triển trò chơi với kiến ​​thức Java.

Ý nghĩ đang thay đổi về khả năng sử dụng các ngôn ngữ cấp cao hơn này cho một số trò chơi nâng cao hơn. Chẳng hạn, một trong những trò chơi yêu thích của tôi, Train Simulator của Auran, được viết với các phần lớn bằng C #, và nó hoạt động khá tốt. Vì vậy, cơ sở đang phát triển và sẽ tiếp tục phát triển.

5
BBlake

Trò chơi hiện đại là tất cả về đồ họa 3D xảy ra trong phần cứng mục đích đặc biệt.

Ngay cả vào năm 2002, Jacob Marner đã tìm thấy trong báo cáo của mình "Đánh giá Java cho phát triển trò chơi" mà Java hoàn toàn có thể sử dụng cho các trò chơi, ngoại trừ phụ thuộc vào hiệu suất nhất các bộ phận và do sự mạnh mẽ của ngôn ngữ và JVM cơ bản mà nó rẻ hơn để làm theo cách này.

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

Theo ý kiến ​​cá nhân của tôi, với sự tiến bộ đã xảy ra kể từ đó, đặc biệt là trong đồ họa 3D và với các ràng buộc tuyệt vời với OpenGL et al, rằng nhược điểm này ngày nay ít được phát hiện hơn.

Do đó vấn đề phải ở nơi khác. Một lý do có khả năng là kích thước của thời gian chạy Java (ngày nay không còn là vấn đề với các trò chơi đa DVD) và một quán tính khác của mã hiện có. với mã gốc trong Java. Một lý do thứ ba là những gì các nhà phát triển ngôi sao làm các trò chơi quen thuộc. Thứ tư là liệu Java hoàn toàn có sẵn trên nền tảng.

Mặc dù vậy, có một điều chắc chắn - hầu hết các trò chơi đang chuyển sang dạng script thay vì ghi tất cả mã C ngay từ đầu và bạn muốn có thời gian chạy tốt nhất bên dưới ngôn ngữ kịch bản lệnh của mình. Ngày nay, điều này có nghĩa là CLR hoặc JVM.

5
user1249

Các nhà phát triển trò chơi thích gần gũi với kim loại và thường sẽ viết các vòng lặp chặt chẽ bên trong của họ trong hội. Java không cung cấp cùng một mức hiệu suất có thể, cả về tốc độ phù hợp hoặc sử dụng bộ nhớ (chạy JIT đều phải trả phí).

4
dan_waterworth

Tôi nghĩ rằng yếu tố hạn chế đối với hầu hết mọi người là (thiếu) sự sẵn có của các công cụ trò chơi tốt. Để đi rất xa, chúng ta cần xem xét tại sao những thứ đó không có sẵn.

Tôi sẽ nhìn nó từ hướng khác một lát. Phát triển một công cụ trò chơi (ví dụ) là một rất nhiề công việc. Ai sẽ được hưởng lợi đủ từ việc phát triển một để đầu tư thời gian và công sức để làm như vậy?

Hầu hết các ứng cử viên rõ ràng cho phát triển giống như khung trong/for Java (ví dụ: IBM, Oracle) dường như không có hứng thú với trò chơi. Các ứng cử viên rõ ràng cho phát triển trò chơi (ví dụ: Id, EA ) dường như có ít sự quan tâm như nhau đối với Java.

Gần như chỉ ứng cử viên tôi có thể nghĩ rằng dường như hoàn toàn hợp lý sẽ là Google. Ngôn ngữ phát triển chính cho Android là Java và khuyến khích phát triển trò chơi cho Android có thể cung cấp lợi thế thực sự cho nền tảng.

Theo như tôi biết, họ chưa làm như vậy (chưa?), Điều này để lại một số giới hạn khá nghiêm trọng cho hầu hết mọi người khác. Không có chút gì để các công cụ trò chơi hiệu năng cao, hiện đại sử dụng phát triển trên Java có nghĩa là khá nhiều công việc phụ, với (rất giống với tôi) sẽ có rất ít triển vọng để tạo ra nhiều lợi ích để đáp lại cho công việc làm thêm đó.

4
Jerry Coffin

Câu hỏi ngang tầm với việc hỏi điều gì đó trong các dòng:

Điều gì là tốt hơn để cung cấp năng lượng cho xe của bạn, động cơ thuyền hoặc động cơ phản lực.

Nó liên quan đến khả năng mở rộng, tránh lỗi, tốc độ, chữ ký bộ nhớ, mô-đun và toàn bộ Máy chủ. Câu hỏi không nên là về những gì tốt hơn theo tiêu chuẩn ngành, câu hỏi nên là "điều gì tốt hơn cho tôi" như trong những gì bạn biết hoặc bạn hiểu rõ về nó như thế nào. Nếu nó thực hiện công việc thì nó thực hiện công việc, nếu bạn thực sự có thể bán ý tưởng thì nó hoạt động và ai biết bạn thậm chí có thể uốn cong một vài thìa.

1
Meh

Java không được tạo ra với mục đích phát triển trò chơi, Java được tạo thành ngôn ngữ "cho web".

Về phát triển trò chơi, Sun không thực sự hỗ trợ Java là ngôn ngữ phát triển trò chơi do Microsoft hỗ trợ C #.

Tôi nghĩ rằng việc thiếu các khung phát triển trò chơi hấp dẫn là điều thực sự đã giết chết Java trong khía cạnh này.

0
Mahmoud Hossam