क्या क्रॉस-प्लेटफॉर्म गेम्स के लिए जावा एक अच्छा विकल्प है? [बन्द है]


13

मैं जावा में एक गेम बनाना चाहता हूं और यह चाहूंगा कि यह विंडोज, लिनक्स और मैक पर काम करे। मुझे पूरा यकीन है कि C # इसके लिए एक बुरा विकल्प है, और मुझे C या C ++ में पर्याप्त अनुभव नहीं है। मैं फ्लैश से दूर रहना चाहता हूं। इसलिए, जावा मेरे लिए एक अच्छा विकल्प है? ज्यादातर, मैं C # का उपयोग करता हूं, और सोचता हूं कि जावा समान है, इसलिए मुझे लगता है कि यह सीखना मुश्किल नहीं होगा। लेकिन क्या यह काफी तेज है? क्या जावा की तुलना में मेरी आवश्यकताओं के लिए एक भाषा अधिक उपयुक्त है?


8
आप किस खेल की शैली पर निर्भर करते हैं। इस शैली के आधार पर, यह हो सकता है कि HTML5 और कुछ जावास्क्रिप्ट आपके लिए काम करेंगे, अगर जावा नहीं।
पैट्रिक ह्यूजेस

Oddlab जावा आधारित गेम बेचता है, जैसे ट्राइबल ट्रबल। आप उनके इंजन का विवरण oddlabs.com/technology.php

5
Minecraft जावा में लिखे गए क्रॉस-प्लेटफॉर्म गेम का एक शानदार उदाहरण है। जब हमारे बालक के पास एक गंभीर Minecraft सत्र के लिए उसके पाल होते हैं, तो वे इसे OSX, Windows और Linux पर खेल रहे होते हैं।
केव

दो साल बाद, C # अब एकता इंजन और / या मोनोगेम की मदद से ऐसी चीजों के लिए काफी अच्छा है, दोनों ही iOS, Android और WP8 का समर्थन करते हैं।
मैगस

जवाबों:


28

जावा क्रॉस-प्लेटफॉर्म गेम्स लिखने के लिए बेहद उपयुक्त है। मुख्य लाभ:

  • पोर्टेबिलिटी - सामान्य तौर पर, आप एक जावा गेम लिख सकते हैं और उम्मीद कर सकते हैं कि यह अधिकांश प्लेटफार्मों पर अपरिवर्तित चले। यह शायद किसी भी भाषा का सबसे पोर्टेबल विकल्प है - C / C ++ एक और अत्यधिक पोर्टेबल विकल्प है, लेकिन प्रत्येक प्लेटफ़ॉर्म के लिए इसे पुन: संकलित करने की आवश्यकता है और कई मामलों में पुस्तकालयों में प्लेटफ़ॉर्म विशिष्ट विशेषताएं हैं जो पोर्टेबिलिटी को सीमित करती हैं।
  • प्रदर्शन - जावा कोड, यदि अच्छी तरह से लिखा गया है, तो C / C ++ सहित किसी भी अन्य भाषा में बहुत अधिक प्रदर्शन करेगा। JVM JIT कंपाइलर बेहद अच्छा है। आप जावा (Minecraft, उदाहरण के लिए) में एक शीर्ष गुणवत्ता, सफल खेल लिख सकते हैं।
  • लाइब्रेरियाँ - जावा के लिए बहुत सी लाइब्रेरियाँ उपलब्ध हैं जो लगभग हर उस फीचर को कवर करती हैं जो आप गेम में चाहते हैं, इसमें नेटवर्किंग से लेकर ग्राफिक्स तक एआई से साउंड कर सकते हैं। अधिकांश जावा पुस्तकालय खुले स्रोत हैं।

मुख्य निर्णय आपको लेना होगा कि आप किस GUI ढांचे का उपयोग करने जा रहे हैं। वहाँ कुछ अलग विकल्प हैं, लेकिन सबसे प्रमुख हैं:

  • jMonkeyEngine - पूरी तरह से 3 डी इंजन। यदि आप एक 3 डी गेम बनाना चाहते हैं तो यह संभवतः आपकी सबसे अच्छी पसंद है - इसमें बहुत सारे गेम इंजन की विशेषताएं हैं जैसे दृश्य रेखांकन, इलाके पीढ़ी आदि।
  • LWJGL - OpenGL की सीधी पहुंच वाला एक अधिक निम्न-स्तरीय पुस्तकालय। यदि आप अधिकतम प्रदर्शन चाहते हैं और खरोंच से अपने बहुत सारे इंजन लिखने का मन नहीं है, तो आपसे अपील करने की संभावना है।
  • स्विंग - में बेहद पोर्टेबल होने का फायदा है और इसे जावा रनटाइम में शामिल किया गया है ताकि अतिरिक्त निर्भरता की आवश्यकता न हो। यह गैर-रेखीय-गहन गहन 2 डी गेम (रणनीति खेल, कार्ड गेम आदि) के लिए अच्छा है।
  • स्लीक - LWJGL पर आधारित एक 2D गेम लाइब्रेरी। शायद अच्छा हो अगर आप 2 डी गेम लिखना चाहते हैं लेकिन फिर भी अच्छे ग्राफिक्स प्रदर्शन (शूट-एम-अप, स्क्रॉलिंग प्लेटफॉर्म गेम आदि) की आवश्यकता है
  • JavaFX - समृद्ध इंटरनेट अनुप्रयोगों के लिए डिज़ाइन किया गया है, लगभग फ्लैश की तरह। इसमें बहुत सी साफ-सुथरी विशेषताएं हैं जो खेलों के लिए अच्छी होंगी, हालांकि मैंने इसे अभी तक इस्तेमाल नहीं किया है। विशेष रूप से JavaFX 2.0 काफी आशाजनक दिख रहा है।

गेमिंग के लिए जावा के लिए मुख्य नुकसान वास्तव में "एज मामलों" के आसपास हैं जो शायद आपको प्रभावित नहीं करेंगे लेकिन गेम के कुछ वर्गों के लिए प्रासंगिक हैं:

  • 3 डी इंजन की उपलब्धता - हालांकि ऊपर सूचीबद्ध उपकरण और इंजन अच्छे हैं, फिर भी वे पेशेवर गेम कंपनियों द्वारा उपयोग किए जाने वाले अवास्तविक इंजन की तरह सी / सी ++ इंजन के स्तर तक काफी ऊपर नहीं हैं। तो जावा संभवतः आपकी पहली पसंद नहीं है यदि आप एक बहु-मिलियन बजट के साथ एक प्रमुख एफपीएस विकसित करने की कोशिश कर रहे हैं - सी / सी ++ अभी भी यहां से बाहर जीतता है।
  • जीसी विलंबता जावा कचरा संग्रह कुल मिलाकर एक बहुत बड़ा लाभ है, लेकिन जब जीसी चक्र होता है, तो यह थोड़ा रुक सकता है। यह नई कम-विलंबता JVMs के साथ बहुत बेहतर हो रहा है, लेकिन अभी भी बहुत कम विलंबता आवश्यकताओं (शायद पहले व्यक्ति निशानेबाजों) के साथ खेल के लिए एक मुद्दा हो सकता है। एक वैकल्पिक हल http://javolution.org/ जैसी कम विलंबता पुस्तकालयों का उपयोग करना है , हालांकि ये गेम के बजाय उच्च आवृत्ति ट्रेडिंग या रीयलटाइम सिस्टम पर अधिक लक्षित होते हैं।
  • निम्न स्तर के अनुकूलन का फायदा उठाने की क्षमता का अभाव - जबकि जावा जेआईटी संकलक अविश्वसनीय रूप से अच्छा है, यह अभी भी कुछ बाधाओं को लागू करता है जिनसे आप बच नहीं सकते हैं (उदाहरण के लिए, सरणियों पर जाँच करना)। यदि आपको वास्तव में इस तरह की चीज़ को अनुकूलित करने के लिए देशी मशीन-कोड स्तर का उपयोग करने की आवश्यकता है, तो फिर से आप शायद जावा पर C / C ++ पसंद करेंगे।

ध्यान दें कि विचार करने के लिए कुछ परिनियोजन विकल्प भी हैं:

  • एप्लेट - एक ब्राउज़र में चलता है, उपयोगकर्ताओं के लिए बहुत सुविधाजनक है, हालांकि सुरक्षा कारणों से एप्लेट्स को प्रतिबंधित कर दिया जाता है। ध्यान दें कि आप अतिरिक्त सुरक्षा विशेषाधिकार प्राप्त करने के लिए एप्लेट्स पर हस्ताक्षर कर सकते हैं, हालांकि यह अधिकांश उपयोगकर्ताओं के लिए थोड़ा डरावना संकेत देगा।
  • जावा वेब स्टार्ट - अधिक परिष्कृत खेलों के लिए बेहतर है, जिन्हें पूर्ण स्थानीय डाउनलोड की आवश्यकता होती है और स्थानीय सिस्टम संसाधनों तक पहुंचने की भी आवश्यकता होती है। यह एक सुंदर मंच-स्वतंत्र तरीके से भी काम करता है। मध्यम आकार के खेल के लिए संभवतः सबसे अच्छा मार्ग या ऐसा कुछ जो एपलेट सुरक्षा प्रतिबंधों से बचने की आवश्यकता है।
  • इंस्टॉलर डाउनलोड - आप जावा गेम के लिए एक इंस्टॉलर लिख सकते हैं जैसा कि आप किसी अन्य भाषा के लिए कर सकते हैं। यह कॉन्फ़िगर करने और निश्चित रूप से परीक्षण करने के लिए थोड़ा अधिक काम है, क्योंकि इंस्टॉलरों में कुछ मंच-विशिष्ट विशेषताएं हैं।
  • वेब - आप एक HTML5 वेब एप्लिकेशन लिख सकते हैं और सर्वर साइड पर विशुद्ध रूप से जावा की ताकत का उपयोग कर सकते हैं। मल्टीप्लेयर वेब गेम के लिए विचार करने लायक।

अंत में, यह जेवीएम की कुछ अन्य भाषाओं पर विचार करने के लायक है - इनमें ऊपर सूचीबद्ध जावा प्लेटफॉर्म के सभी लाभ हैं, लेकिन कुछ इन्हें जावा की तुलना में बेहतर भाषा मानते हैं। स्काला, क्लोजर और ग्रूवी सबसे प्रमुख होंगे, और वे सभी ऊपर सूचीबद्ध जावा टूल और लाइब्रेरी का उपयोग कर सकते हैं।


1
JWS वास्तव में ब्राउज़र से आपके ऐप को अलग करने के अलावा अन्य एप्लेट्स पर अधिक नहीं जोड़ता है। यदि आप OpenGL लाइब्रेरी का उपयोग कर रहे हैं, तो मुझे लगता है कि दोनों मामलों में आप अपने कोड पर हस्ताक्षर करना चाहते हैं।
पीटर टेलर

2
मैं कहूंगा कि कई गंभीर खेलों, विशेषकर मल्टीप्लेयर के लिए एपलेट प्रतिबंधों पर स्थानीय प्रणाली की पहुंच बहुत बड़ी "बहुत" है। एचटीएमएल 5 साफ-सुथरा है, लेकिन यह अभी भी धब्बेदार समर्थन और कई बिट्स जैसे जीएल और सॉकेट के साथ एक मूतदार बच्चा है, जो कई ब्राउज़रों पर बंद है, साथ ही ऑडियो गेम के उपयोग के लिए अभी तक अनुकूल नहीं है।
पैट्रिक ह्यूजेस

1
@PatrickHughes, यदि आप चाहते हैं कि JWS से स्थानीय प्रणाली का उपयोग बड़े डरावने संवादों के बिना हो, तो आपको अपने कोड पर हस्ताक्षर करने की आवश्यकता होगी - और एक हस्ताक्षरित एप्लेट में आमतौर पर स्थानीय प्रणाली भी होगी।
पीटर टेलर

आप अपने जावा गेम को वितरित करने के लिए इनो सेटअप का भी उपयोग कर सकते हैं ।
महमूद होसाम

1
आप LIBGDX को उन पैकेजों की सूची में जोड़ सकते हैं जो आपको अपना इंजन लिखने में मदद करते हैं; इसमें विभिन्न प्लेटफार्मों के लिए सेटअप और जेएनआई अनुकूलन और यहां तक ​​कि एंड्रॉइड और डाउन टू ओपनजीएल ईएस है।
पैट्रिक ह्यूजेस

4

Minecraft और Blocks जो Matter जावा में दोनों बने हैं, इसलिए हाँ यह गेम बनाने के लिए काफी अच्छा है। यदि आप उस मार्ग पर जाने और एक मूल एप्लिकेशन लिखने के लिए चुनते हैं तो मुख्य मुद्दा यह है कि जावा का उपयोग करते समय आप मोबाइल प्लेटफॉर्म पर पोर्ट कर रहे हैं। एंड्रॉइड एक अलग लाइब्रेरी के साथ एक प्रकार का फ्रेंकेनस्टेनड जावा एसई है। RIM का ब्लैकबेरी जावा ME का उपयोग करता है। iOS को सिद्धांत रूप में जावा के साथ प्रोग्राम किया जा सकता है, हालांकि ऑब्जेक्टिव-सी संभवतः उस प्लेटफॉर्म के लिए एक बेहतर विकल्प होगा।

जावा काफी हद तक C # के समान है। मुझे अक्सर केवल जावा जानने के बावजूद C # कोड समझ में आता है। उनके पास एक अलग डिज़ाइन दर्शन है, लेकिन जहाँ तक बिल में फिट होने के लिए न्यूनतम परेशानी के साथ व्यापक रूप से तैनात होने की बात है। C # किसी भी खिंचाव के खेल के लिए एक भयानक विकल्प नहीं है, हालांकि आपका मोबाइल परिनियोजन कठिन होगा और गैर-विंडोज़ प्लेटफ़ॉर्म पर तैनाती करने में अधिक समय लगेगा या जो विशिष्ट बाहरी पुस्तकालयों के आधार पर मुश्किल है या इसके बाद आप उपयोग कर रहे हैं।


1
मोबाइल पर जावा: एक बार संकलित करें, हर जगह डिबग करें: '(!
deadalnix

0

HTML5 + जावास्क्रिप्ट कॉम्बो का उपयोग करने के लिए सबसे स्पष्ट और कम से कम प्रतिरोधी तरीका है। इसका उपयोग करके बनाया गया कोई भी एप्लिकेशन या गेम लगभग हर डिवाइस और ब्राउज़र पर चलेगा।

लाभ : - आपको अपने गेम को विभिन्न प्लेटफार्मों और उपकरणों पर चलाने के लिए शून्य कॉन्फ़िगरेशन की आवश्यकता होगी।

नोट: - मैंने कुछ गेम देखे हैं जो उपरोक्त तकनीकों का उपयोग करके बनाए गए हैं लेकिन वे कद में छोटे थे। लेकिन, मुझे लगता है कि अगर कोई दूध से मक्खन निकाल सकता है तो पनीर असंभव नहीं है


0

आप उपयोग कर सकते हैं स्काला और योजना Bigloo पर बल दिया कोड या अपने जावा खेल के अंदर समानांतर कार्रवाई के लिए JVM उपयोग करने के लिए ग्रहण पर।

पैटर्न डिज़ाइन और UML2 के साथ, आप OCL के साथ भी कोड सुरक्षित कर सकते हैं, सभी Topcased.org में है।

उन उपकरणों को माहिर करने में समय लगता है, लेकिन वे जावा की पृष्ठभूमि हैं, आधार जो आपको शीर्ष पर धकेल देगा।


-10

संक्षिप्त उत्तर: नहीं।

जावा एक द्विआधारी निष्पादन योग्य नहीं बनाता है लेकिन केवल C # करता है (CLI) के रूप में बाईटेकोड, और दो मुख्य कारणों से "खुले वातावरण" में गंभीर व्यवसाय के लिए यह अच्छी बात नहीं है:

  • रिवर्स इंगेजिंग में फंसने की संभावना बहुत अधिक है, विशेष रूप से जावा जैसी पुरानी और वास्तव में अच्छी तरह से जानी जाने वाली भाषाओं के साथ
  • आप मशीन के प्रदर्शन पर पूर्ण नियंत्रण में नहीं हैं, जावा के मामले में जेवीएम पूर्ण नियंत्रण लेने में एक बड़ी भूमिका निभाता है।

बेशक हर भाषा की अपनी लाइब्रेरियाँ होती हैं, लेकिन उनमें से प्रत्येक के लिए बड़ी मात्रा में होने के कारण यह एक वास्तविक समस्या नहीं है और मुझे नहीं लगता कि इस विषय का उद्देश्य है।

हो सकता है कि पेशेवर स्तर पर आप कुछ ऐसा पा सकते हैं जो एक देव-किट की तरह नियम को तोड़ सकता है जो सभी सी # बयानों को एक वास्तविक विश्व मशीन के लिए विधानसभा कोड में अनुवाद कर सकता है, लेकिन अगर इस तरह का दृष्टिकोण यह कार्डों में नहीं है तो आप व्यावहारिक रूप से मजबूर हैं। अपने विकास के लिए केवल C और C ++ पर विचार करें जब आप अपने उत्पाद को खुले वातावरण में बेचना चाहते हैं।

मोबाइल उपकरणों के लिए चीजें थोड़ी भिन्न हैं क्योंकि वे "बंद वातावरण" हैं यहां तक ​​कि एंड्रॉइड भी इस तथ्य को देखते हुए व्यावहारिक रूप से बंद है कि वास्तविक दुनिया के रोम आम तौर पर जनता के लिए उपलब्ध नहीं हैं, एंड्रॉइड को ओपनसोर्स माना जा सकता है लेकिन 99 वास्तविक उपकरणों पर रोम का% नहीं है। इस मामले में आप बहुत अधिक बहस नहीं कर सकते, सब कुछ आपके लिए पहले से ही निर्धारित है और हर मंच की अपनी भाषा होती है जैसे हर कोई जानता है।

अंत में यदि आप एक खुले वातावरण में इस उत्पादों को बेचने जा रहे हैं, तो मैं केवल उन भाषाओं का सुझाव दे सकता हूं जो संकलित और बाइनरी / असेंबली कोड का उत्पादन कर सकते हैं, बंद वातावरण में निर्णय अलग-अलग कारणों से करने के लिए टिपिक रूप से अधिक आसान है।


7
आपको लगता है कि संकलित बायनेरिज़ बायटेकोड बायनेरिज़ की तुलना में रिवर्स इंजीनियर के लिए कठिन हैं। इसमें थोड़ी सच्चाई हो सकती है, लेकिन बहुत कुछ नहीं। वास्तव में शायद अधिक से अधिक लोग x86 और x64 disassembler के साथ CLI या Java bytecode के साथ काम कर सकते हैं, और आप चकित होंगे कि IDA Pro जैसा टूल कितना मददगार हो सकता है (अस्वीकरण - मैंने इसका उपयोग मुफ्त संस्करण के बाद से नहीं किया है साल पहले - यह शायद अब और भी आसान है)। एक ऑबफॉस्केटेड बायटेकोड फ़ाइल भी रिवर्स इंजीनियर के लिए कठिन हो सकती है और, किसी भी मामले में, ज्यादातर लोगों के पास देखभाल करने के लिए बहुत कम कारण होंगे।
स्टीव ३४

2
देखभाल करने का कम कारण क्यों? खैर, कितने लोग अपने स्वयं के निम्न-स्तरीय मालिकाना खेल इंजन लिखते हैं? और यहां तक ​​कि अगर आप ऐसा करते हैं, तो ऐसी कौन सी बाधाएं हैं जो किसी को आपके एक को चुराएगी (रिवर्स इंजीनियरिंग की आवश्यकता है, किसी भी तरह के प्रलेखन की कमी है, आदि - बहुत समय बर्बाद हो गया, कोई फर्क नहीं पड़ता कि विकास की भाषा क्या है) कानूनी रूप से उपयोग करने के बजाय अच्छी तरह से प्रलेखित मुक्त खुला स्रोत इंजन? पूर्ण कार्यक्रम की चोरी कोड विचारों को चोरी करने के लिए रिवर्स इंजीनियरिंग की तुलना में कहीं अधिक वास्तविक चिंता है, और समुद्री डाकू मूल संकलित कोड द्वारा थोड़े से भी कम नहीं लगते हैं।
स्टीव 314

1
अमूर्तता के स्तर पर, जेवीएम निर्देश बेहद निम्न स्तर के होते हैं - हार्डवेयर में ठीक नहीं होते हैं, लेकिन मूल रूप से केवल आवेदन परत के अमूर्तन से हटाए जाते हैं। जहां अमूर्त गिनती की परतें मानक जावा पुस्तकालयों में होती हैं, मतलब मंच और अंतिम अनुप्रयोग के बीच वास्तव में कुछ परतें होती हैं। सिवाय इसके कि सामान्य तौर पर C और C ++ में वैसे भी होता है (लिबपेंग को क्यों मजबूत किया जाए) - ज्यादातर लोग सामान्य पुस्तकालयों का उपयोग करेंगे जो प्रभावी रूप से व्यापक रूप से ज्ञात प्लेटफार्मों का एक सेट बनाते हैं, और अच्छे रिवर्स-इंजीनियरिंग उपकरण उन्हें पहचान सकते हैं।
स्टीव 314

3
आवश्यकताओं को पूरा करने के लिए सभी कोड को FPGA पर शिप करना होगा और एपॉक्सी में संलग्न करना होगा। आश्चर्य, यहां तक ​​कि ब्लैक-बॉक्स चिप पैकेज हर समय रिवर्स इंजीनियर हो सकते हैं। तब इंटेल जैसे शक्तिशाली दिग्गज भी अपने सीपीयू पैकेज में बग का परिचय देते हैं ताकि आपका एपॉक्सी एम्बेडेड हो, हार्डवेयर ब्लैक बॉक्स अभी भी हार्डवेयर पुस्तकालयों के संपर्क में है। अंत में अस्पष्टता से सुरक्षा के लिए कॉल, वह काम नहीं करता है। Reductio ad absurdum, मुझे पता है, लेकिन मूल जवाब यही है।
पैट्रिक ह्यूजेस

3
दुर्भाग्य से मेरे पास आपको नीचा दिखाने के लिए पर्याप्त प्रतिष्ठा नहीं है। आपके सभी तर्क विफल हैं। सी, सी ++ या जो भी भाषा में उत्पादित डिकोडिंग, डिकंपाइलिंग और हैकिंग गेम हैं, लोग हैं, इसलिए एक बाइनरी पैकेज होने से बहुत अतिरिक्त सुरक्षा नहीं मिलेगी। इसके अलावा, अगर ओपी इस बारे में चिंतित है, तो वहाँ बहुत अच्छे जावा पर्यवेक्षक हैं। मशीन के प्रदर्शन के पूर्ण नियंत्रण के बारे में, सी और सी ++ प्रोग्रामर में से अधिकांश के पास यह नहीं है, बस अच्छा कोड लिखें और कंपाइलर का अनुकूलन होगा। और यहां तक ​​कि अगर यह एक समस्या है, तो आप जेएनआई या जेएनए का उपयोग कर सकते हैं।
विक्टर स्टैफुसा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.