2011-01-25 33 views
17

मैं हाल ही में गेम विकास में देख रहा हूं और मेरी पहली प्रोग्रामिंग भाषा जावा है। सी ++ में विकसित कई आश्चर्यजनक गेम खेलने के बाद मुझे आश्चर्य हुआ कि गेम उद्योग में जावा का भारी उपयोग क्यों नहीं किया जाता है। मैंने jMonkeyEngine 3 और कुछ अन्य गेम इंजन वातावरण देखा लेकिन मैंने देखा स्क्रीनशॉट बहुत कम आश्चर्यजनक है। यूबिसॉफ्ट से स्पीड हॉट पीछा फॉर्म ईए और हत्यारे पंथ की आवश्यकता जैसे शीर्षक इस तरह के यथार्थवाद को व्यक्त करते हैं। जावा ऐसे उद्योग शक्ति गेम क्यों नहीं बना सकता? क्या यह कला का काम है?जावा गेम इंजन

जावा और सी # में स्वचालित कचरा संग्रह है और सी ++ नहीं है। प्रोग्रामर को लटकने वाले पॉइंटर्स को और अधिक करने के लिए मेमोरी उपयोग पर अधिक ध्यान देना पड़ता है।

धन्यवाद दोस्तों।

+0

एलडब्ल्यूजेजीएल, इसकी एक महान जावा ग्राफिक्स लाइब्रेरी को देखने का प्रयास करें। यह काफी हाल ही में है, हालांकि, अगर स्मृति सेवा करता है। –

उत्तर

19

जावा और सी # में स्वचालित कचरा संग्रह और सी ++ नहीं है। प्रोग्रामर को पर पॉइंटर्स और अधिक से अधिक लटकने के लिए स्मृति उपयोग के लिए अधिक ध्यान देना होगा।

आपने स्वयं अपने प्रश्न का उत्तर दिया है।

गेम प्रोग्रामिंग कचरा संग्रह में कोई फायदा नहीं है। यहां तक ​​कि यदि अधिकांश कार्यों के लिए जावा का प्रदर्शन सी ++ के बराबर कम या कम है, और जेआईटी बहुत आक्रामक अनुकूलन भी कर सकता है जो स्थिर विश्लेषण के दौरान किए जा सकते हैं; कचरा संग्रह सबसे खराब पल में framerates ड्रॉप कर सकते हैं।

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

एक और महत्वपूर्ण बात यह है कि उद्योग में कैसे पहले से ही तय किया गया है। खेल उद्योग में सी ++ की जड़त्व बहुत बड़ी है। सभी गेम डेवलपर्स आज सी और सी ++ जानते हैं। कंपनी के छोड़ने वाले प्रमुख लोगों के प्रबंधन खतरों में से एक से कम से कम किराए पर लेने के लिए एक बड़ा डेवलपर पूल रखना।

लेकिन इसके बावजूद, जावा में लिखे गए कुछ हिस्सों के साथ कुछ सफल गेम हुए हैं, जैसे Vampire: The Masquerade - Redemption

Minecraft जैसे हालिया गेम जावा में पूरी तरह से लिखा गया है; लेकिन इसमें कला ग्राफिक्स की स्थिति नहीं है, क्योंकि वर्चुअल वातावरण की गतिशील प्रकृति में जोर दिया जाता है।

और कई अन्य गेम और इंजनों में एक रनटाइम होता है जो उच्च प्रदर्शन प्रतिपादन और नेटवर्किंग प्लेटफॉर्म (सी/सी ++ में लिखे गए) के शीर्ष पर बनाए गए एक प्रबंधित (सुरक्षित स्वचालित मेमोरी आवंटन और संग्रह) स्क्रिप्टिंग भाषा का समर्थन करता है, उदाहरण के लिए Unreal Engine

+0

वास्तव में? आपने Minecraft का उल्लेख नहीं किया है? संपादित करें: मुझे अभी एहसास हुआ कि यह लोकप्रियता में अपने स्पाइक से पहले हो सकता है ... क्षमा करें। –

+1

@ निकहार्टली कोई चिंता नहीं, यह हर समय होता है ... – fortran

+3

:) मुझे अभी भी मंद महसूस होता है ... लेकिन आप Minecraft को शामिल करने के लिए अपना उत्तर संपादित कर सकते हैं! –

1

यह पूरी तरह से सच नहीं है कि गेमिंग उद्योग में कचरा संग्रह का उपयोग नहीं किया जाता है। अवास्तविक इंजन 3 में 'स्क्रिप्ट' कक्षाओं के लिए कचरा संग्रह लागू किया गया है। उनके लिए, हल्के ढंग से उपयोग किए जाने पर प्रदर्शन स्वीकार्य है; भारी भारोत्तोलन सी/सी ++ कोड द्वारा किया जाता है जो इसकी अपनी स्मृति का प्रबंधन करता है।

जैसा कि किलेन ने कहा था, जावा वास्तव में गति से चिंताओं के कारण गेमिंग उद्योग में उपयोग नहीं किया जाता है (जावा वीएम पर कोड चलाता है, न कि मूल रूप से ... अधिकतर समय) और क्योंकि पहले से ही बड़ी संख्या में प्रतिभाशाली हैं गेम प्रोग्रामर जिन्होंने सी और सी ++ में बहुत सारे उपयोग किए गए कोड लिखे हैं। ऐसा नहीं है कि आप गेम बनाने के लिए जावा का उपयोग नहीं कर सकते हैं, क्योंकि वहाँ कुछ जावा गेम हैं, लेकिन 'मुख्यधारा' गेमिंग उद्योग ने सी/सी ++ बैकएंड में भारी निवेश किया है।

+3

कुछ सुधार: मूल गति पर आधुनिक जेवीएम का रन कोड। JVM एक जेआईटी कंपाइलर के साथ आता है जो ट्रैक करता है कि कितनी बार कोड का एक टुकड़ा चलाया जाता है और एक बार जब संदर्भ गणना कुछ सीमाओं को हिट करती है, तो यह उस कोड को मूल मशीन कोड में संकलित करता है। यही कारण है कि कई जावा बेंचमार्क में रनों को फेंकना शामिल है जो कोड को संकलित करने के लिए जेआईटी को मजबूर कर इंजन को "प्राइम" करते हैं। – jeckhart

0

फोर्टन और जेम्स ने इसे पहले से ही बहुत अच्छी तरह से कवर किया है, लेकिन एक और बात जो मैं उल्लेख करना चाहूंगा, जड़ता के बारे में बात करते समय किस तरह के संकेतों का संकेत मिलता है, सी ++ में उपलब्ध पुस्तकालयों का विशाल पूल है। लगभग किसी भी चीज के लिए कई सी ++ पुस्तकालय होने के कारण आप संभवतः सोच सकते हैं कि जावा पर स्विच न करने का एक बड़ा कारण है। यह कहना नहीं है कि अभी जावा के लिए पुस्तकालय नहीं हैं, लेकिन सी ++ वाले पहले से ही परिपक्व हैं और अनुभवी देवताओं के बड़े समुदाय हैं। एक ही समय को फिर से लिखना नहीं है जो आपने 1000x पहले किया है, एक बड़ा समय बचाने वाला है।

+1

मुझे लगता है कि यह कहना गलत है कि कोई परिपक्व जावा लाइब्रेरी उपलब्ध नहीं है। जबकि जावा दुनिया में गेमिंग के लिए विशिष्ट कम पुस्तकालय हो सकते हैं, वहां लगभग सभी चीजों के लिए अनगिनत परिपक्व पुस्तकालय उपलब्ध हैं। – jeckhart

19

आम तौर पर यहां बताया गया कि गेम विकास के लिए जावा को बंदरगाह नहीं करना एक कारण था; था। गेमिंग उद्योग वर्तमान में प्रतिमान शिफ्ट पर टक्कर मार रहा है। तीन चीजें बदल गई है या वर्तमान में जुआ खेलने के उद्योग बदल रहे हैं: अब और

  • चोरी
  • क्लाइंट-सर्वर कार्यक्रम मॉडल
  • मॉड्यूलर नेटवर्किंग कार्यक्रम मॉडल

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

यह कहना महत्वपूर्ण है कि सभी दो परिदृश्यों में, ऊपर सूचीबद्ध सभी तीन चिंताओं को भंग कर दिया गया है। एक गेम जो सर्वर के बिना काम नहीं कर सकता है, उल्लंघन की प्रतिलिपि होने के बारे में चिंता करने की आवश्यकता नहीं है (रिवर्स इंजीनियरिंग के माध्यम से निजी होस्टिंग शामिल नहीं है)। नेटवर्क आश्रित गेम की मांग के लिए एक ऐसी भाषा की आवश्यकता होती है जो नेटवर्क प्रदर्शन के साथ सिस्टम प्रदर्शन को संतुलित कर सकती है (आमतौर पर स्टेलेमेट जावा और सी/सी ++, सी/सी ++ के पक्ष में सख्ती से पूर्व-मौजूदा पुस्तकालयों की प्रचुरता के कारण)। हालांकि, एक मॉड्यूलर-नेटवर्किंग प्रोग्राम मॉड्यूल में डिज़ाइन किया गया गेम निम्न स्तर की भाषाओं जैसे सी/सी ++ में विकसित करने के लिए अव्यवहारिक होगा। एक कंपनी जो मॉड्यूलर-नेटवर्किंग प्रोग्राम मॉडल के लिए सी/सी ++ में एक गेम को डिजाइन करने में रूचि रखती है, उसे उस गेम में पूरी तरह से समर्पित वर्चुअल मशीन बनाना होगा, या गेम को पुन: प्रोग्राम करना होगा/सोचने के लिए कई बार बहुत ही पागल होना होगा। आईएमओ, जबकि यह कहने में बहुत जल्दी हो सकता है कि कौन सी भाषा को प्राथमिकता दी जा रही है, मैं अपने बेटों को जावा पर तीन प्रमुख कारणों से डाल रहा हूं।

  • 1) JVM जावा आधारित अनुप्रयोगों किसी भी मंच पर लगभग चलाने के लिए, चाहे एप्पल, एंड्रॉयड, Windows 8 या लिनक्स/यूनिक्स व्युत्पन्न (वास्तव में किसी भी हार्डवेयर प्लेटफॉर्म पर सहायक के रूप में अच्छी तरह से) की अनुमति देता है।

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

  • 3) जावा JVM है, जो यह किसी भी तीसरे पक्ष पुस्तकालय के उपयोग के बिना मल्टी कोर प्रोसेसर का पूरा लाभ लेने के लिए अनुमति देता में आंतरिक रूप से सूत्रण का समर्थन करता है। वर्तमान में, यह अन्य सभी भाषाओं (विशेष रूप से फोन के लिए विकसित) के लिए एक बाधा है।

जबकि JVM एक विलंबता चिंता उत्पन्न करता है, यह ध्यान दिया जाना चाहिए कि ऐसी चिंताओं को थ्रेडिंग के माध्यम से हटाया जा सकता है। मैं विंडोज 8 और माइक्रोसॉफ्ट के धक्का के बारे में भी चिंतित नहीं होगा। Google के पास $ 720/शेयर का स्टॉक शेयर है, ऐप्पल $ 526/शेयर है, माइक्रोसॉफ्ट की तारीख 27 डॉलर है। जबकि ऐप्पल को मुख्य रूप से सी # का उपयोग करने के कारण माइक्रोसॉफ्ट के धक्का से प्रभावित होने की संभावना है, दूसरी ओर Google से इसका लाभ होने की संभावना है। Google और Google/Android के विरुद्ध प्रतिस्पर्धा करते समय माइक्रोसॉफ्ट का बहुत भाग्यशाली कभी नहीं होता है। गुस्से में पक्षियों को मूल रूप से जावा एफवाईआई में डिजाइन किया गया था, और आईफोन के लिए सी # पर पोर्ट किया गया था। यदि Google/Android मानकीकरण को लागू करता है, तो माइक्रोसॉफ्ट उनके साथ ऐप्पल लेकर एक फ्लाई की तरह गिर जाएगा।

+0

"आईफोन पर सी #" - आपका मतलब उद्देश्य सी है, है ना? –

+1

सुनिश्चित नहीं है कि इसके साथ व्यक्तिगत स्टॉक मूल्य क्या करना है। बाजार टोपी थोड़ा अधिक प्रासंगिक हो सकती है लेकिन अभी भी इसके साथ बहुत कुछ नहीं करना है। –

3

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

आवधिक अंतराल पर कचरा इकट्ठा करने और स्मृति में बिखरने वाली वस्तुओं के प्रदर्शन के मुद्दों के अलावा, गेम बर्दाश्त नहीं कर सकते अपने थोक संसाधनों के साथ रिसाव हो, और कचरा कलेक्टर वहां चीजों में बाधा डालता है। हां, मैंने अभी कहा है कि जीसी लीक से बचने की क्षमता में बाधा डालता है।

कचरा संग्रह संसाधन रिसाव के खिलाफ चांदी की गोली नहीं है।

जैसा कि लगता है कि प्रतिद्वंद्वी के रूप में प्रतिद्वंद्वी के रूप में, आज वहां सबसे कमजोर ऐप्स देखें: जिन लोगों का आप उनका उपयोग करते हैं, उतना अधिक स्मृति उपयोग बढ़ता जा रहा है। आम तौर पर वे सी या सी ++ अनुप्रयोग नहीं हैं। सी/सी ++ अनुप्रयोग दुर्घटनाग्रस्त होने के लिए कुख्यात हो सकते हैं, लेकिन लीक करने के लिए इतना नहीं। उन रिसाव वाले लोगों को अक्सर कचरा संग्रह वाली भाषाओं में प्रोग्राम किया जाता है।

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

सिद्धांत में कचरा संग्रह लीक को कम करना चाहिए। व्यावहारिक रूप से, यह अक्सर अधिक महंगा और कठिन-से-अलग तार्किक रिसाव के बदले में सस्ता और आसान-से-ठीक-और-ठीक भौतिक रिसाव (जो मैं इस स्ट्रिंग को मिटाना भूल गया) को समाप्त करता है (ओह, तर्क का तर्क सिस्टम पूरे गेम बंद होने तक भारी संसाधनों को घूमने का कारण बनता है)।

ऐसा इसलिए है क्योंकि जीसी भाषा में, यदि आप किसी नए संसाधन, R के साझा स्वामित्व को बनाना चाहते हैं, तो आपको बस एक अन्य ऑब्जेक्ट, A में एक हैंडल/संदर्भ स्टोर करना है। B और CR पर एक हैंडल स्टोर भी कर सकता है, और अब R में तीन मालिक हैं और केवल तीन ही स्वामियों को संदर्भ जारी करने पर ही मुक्त किया जाएगा। उपयोगकर्ता केवल A स्टोर्स के साथ देखता है और काम करता है, इसलिए गेम लॉजिक में से R को समय-समय पर हटा दिया जाता है, लेकिन इसके संदर्भ B और C चुपचाप जारी करते हैं जो कोड रिलीज़ करना भूल गया।सी/सी ++ में, B और C में लटकते सूचक वास्तव में बेहतर हो सकते हैं, क्योंकि यह प्ले परीक्षण के दौरान तुरंत पता लगाने योग्य और सुधार योग्य समस्या का कारण बनता है, जहां डेवलपर एक डीबगर चलाने वाला व्यक्ति बहुत जल्दी स्पॉट करेगा और समस्या को ठीक करेगा। जीसी भाषा में, यह पता लगाना बेहद मुश्किल है और कार्यक्रम क्रैश नहीं होने पर, यह बड़ा समय लीक करना शुरू कर सकता है।

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

कचरा संग्रह सबसे अच्छा है जब संसाधन रिसाव एक बड़ा सौदा नहीं है।

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

4

आपके प्रश्न का उत्तर आर्टवर्क और वित्तीय संसाधन है। और उत्पत्ति Minecreft जावा में एक व्यक्ति द्वारा विकसित किया गया था। जबकि हजारों लोगों की टीमों से एसी या एनएफएस के रूप में टिटल्स विकसित किए जाते हैं। संसाधनों की तुलना करें। इसके अलावा यूबीसॉफ्ट custrom गेम इंजन का उपयोग करता है। यदि आप एकमात्र डेवलपर हैं तो आपको संसाधनों की कमी के कारण विचार पर ध्यान देना चाहिए। और यदि आपके पास कोई विचार है कि गारबी कलेक्टर सामान्य एकल डेवलपर गेम में अनौपचारिक है। और एकमात्र डेवलपर के रूप में आपको सबसे तेजी से विकास तकनीक का चयन करना चाहिए।

-2

आप जावा में लिखे गए गेम ढूंढ सकते हैं (jmonkey इंजन पूरी तरह से जावा में लिखा गया है)।

यहां -> "http://www.indiedb.com/engines/jmonkeyengine/games"।

1. बढ़ती दुनिया।

2. मिनीक्राफ्ट।

3.मेन्थुराना।

सभी जॉमकी इंजन में। उनके ग्राफिक्स की गुणवत्ता तीव्र हैं और चुनौतियां अच्छी हैं।

मैं कहूंगा कि खेल विकास की आवश्यकता कम से कम दो लोगों के पास है। जावा ठीक है।

संबंधित मुद्दे