java bike जावा में केवल कुछ वीडियो गेम क्यों लिखे गए हैं?




java jdk (18)

.NET में निश्चित रूप से कुछ ऐसे मुद्दे हैं जिनमें जावा के तीव्र 3 डी प्रदर्शन की बात आती है। जब 3 डी भारी परिचालनों के साथ काम करने की बात आती है तो माइक्रोसॉफ्ट ने पुस्तकालयों के विकास में बहुत अधिक समय और पैसा भी निवेश किया है।

(... व्यक्तिगत रूप से, मुझे यह भी लगता है कि जब डायरेक्टएक्स और .NET के बीच जादू की बात आती है तो उनके पास पैर था

जावा में लिखे गए कई वाणिज्यिक, 3 डी वीडियो गेम (यादृच्छिक ओपन सोर्स 2 डी वाले नहीं) क्यों नहीं हैं? सिद्धांत रूप में, यह बहुत समझ में आता है: आपको उत्पादकता बढ़ाने और क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन को अन्य चीजों के साथ, जैसे कि जावा पुस्तकालयों की विस्तृत मात्रा और अंतर्निर्मित कचरा संग्रह (हालांकि मैं स्वीकार करता हूं ' मुझे यकीन नहीं है कि उत्तरार्द्ध एक अच्छी बात है)। तो इसका शायद ही कभी उपयोग क्यों किया जाता है? मैं केवल जावा प्लेटफार्म के लिए लिखे गए कुछ लोकप्रिय वाणिज्यिक गेमों के बारे में सोच सकता हूं।

क्या यह प्रदर्शन की वजह से है? यदि हां, तो क्या जीपीयू द्वारा भारी भारोत्तोलन नहीं किया जाएगा?


Answer #1

मैं एक पूर्ववर्ती / लाइसेंस प्राप्त कोडबेस, प्रदर्शन इत्यादि के तत्वों का लाभ उठाने के बारे में अन्य पदों से सहमत हूं।

एक चीज जो मैं जोड़ना चाहता हूं वह वर्चुअल मशीन के माध्यम से गंदा डीआरएम चाल खींचना मुश्किल है।

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


Answer #2

इसके बारे में बहुत पहले से बात की गई थी, आप विकी पर भी कारणों को पा सकते हैं ...

  • खेल इंजन और सभी गहन सामान के लिए सी / सी ++।
  • खेल में लिपि के लिए लुआ या पायथन।
  • जावा - बहुत खराब प्रदर्शन, बड़ी मेमोरी उपयोग + यह गेम कंसोल पर उपलब्ध नहीं है (इसका उपयोग कुछ बहुत ही सरल खेलों (हां, यहां रेजस्केप मायने रखता है, यह बैटलफील्ड या क्राइसिस नहीं है या वहां और क्या है) क्योंकि वहां हैं बहुत सारे प्रोग्रामर जो इस प्रोग्रामिंग भाषा को जानते हैं)।
  • सी # - बड़ी मेमोरी उपयोग (इसका उपयोग कुछ बहुत ही सरल खेलों के लिए किया जाता है क्योंकि बहुत सारे प्रोग्रामर हैं जो इस प्रोग्रामिंग भाषा को जानते हैं)।

और मैं अधिक से अधिक जावा प्रोग्रामर सुनता हूं जो लोगों को यह समझाने की कोशिश करते हैं कि जावा धीमा नहीं है, नेटवर्क पर डेटा प्राप्त करने और भेजने के लिए स्क्रीन पर विजेट खींचने और विजेट पर कुछ ASCII वर्णों को चित्रित करने में धीमा नहीं है (और यह है सी / सी ++ के बजाय इन मामलों (नेटवर्क डेटा मैनिपुलेशन) में इसका उपयोग करने की अनुशंसा की जाती है ... लेकिन गणित की गणना, मेमोरी आवंटन / हेरफेर और बहुत अच्छी चीजों जैसे गंभीर सामानों की बात आती है, लेकिन यह बहुत धीमी है।

मुझे एमआईटी साइट पर एक लेख याद है जहां वे दिखाते हैं कि सी / सी ++ क्या कर सकते हैं यदि आप भाषा और कंपाइलर सुविधाओं का उपयोग करते हैं: जावा में 1 मैट्रिक्स गुणक (2 मैट्रिक्स), 1 कार्यान्वयन और सी / सी ++ में 1 कार्यान्वयन, सी / सी ++ सुविधाओं के साथ और उचित संकलक अनुकूलन सक्रिय, सी / सी ++ कार्यान्वयन जावा कार्यान्वयन की तुलना में ~ 2 9 6 260 गुना तेजी से था।

मुझे उम्मीद है कि अब आप समझते हैं कि लोग गेम में जावा के बजाए सी / सी ++ का उपयोग क्यों करते हैं, जावा में क्रिस्टिस की कल्पना करें, इस दुनिया में कोई भी कंप्यूटर नहीं होगा जो इसे संभाल सकता है ... + कचरा संग्रह विजेट्स के लिए ठीक काम करता है जो सिर्फ एक छवि को नष्ट कर देता है लेकिन यह अभी भी वहां पर कैश किया गया है और इसे साफ करने की जरूरत है, लेकिन गेम के लिए नहीं, निश्चित रूप से, आप प्रत्येक कचरा संग्रहण सक्रियण पर और भी अधिक लापरवाही करेंगे।

संपादित करें : क्योंकि किसी ने लेख के लिए कहा है, यहां, मैंने इसे प्राप्त करने के लिए वेब संग्रह में खोज की है, मुझे उम्मीद है कि आप संतुष्ट हैं ... एमआईटी केस स्टडी

और जोड़ने के लिए, नहीं, गेमिंग के लिए जावा अभी भी एक भयानक विचार है। कुछ दिनों पहले एक बड़ी कंपनी जिसका नाम मैं नहीं करूँगा, अपने गेम क्लाइंट को जावा से सी ++ में फिर से लिखना शुरू कर दिया क्योंकि एक बहुत ही सरल खेल (ग्राफिक्स के मामले में) शक्तिशाली एनवीडिया जीटी 5xx और 6xx पीढ़ी के वीडियो कार्ड के साथ i7 लैपटॉप को गर्म कर रहा था ( न केवल एनवीडिया, यहां बिंदु यह है कि यह शक्तिशाली कार्ड जो मैक्स सेटिंग्स को अधिकांश नए गेम पर संभाल सकता है और इस गेम को संभाल नहीं सकता है) और स्मृति खपत ~ 2.5 - 2.6 जीबी राम थी। ऐसे सरल ग्राफिक्स के लिए इसे मशीन के एक जानवर की जरूरत होती है।


Answer #3

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

जावा में कोई प्रत्यक्ष हार्डवेयर पहुंच नहीं है, जिसका अर्थ है कि आप किसी भी ढांचे के एपीआई के साथ फंस गए हैं।


Answer #4

मुझे लगता है कि गति अभी भी मुद्दा है। क्रॉस प्लेटफ़ॉर्म एक मुद्दा होने जा रहा है, क्योंकि यह नहीं है कि जब आप कोड लिखते हैं तो 3 डी कार्ड उपलब्ध नहीं होता है? क्या जावा के पास 3 डी क्षमताओं की ऑटो खोज का समर्थन करने के लिए कुछ भी है? और मुझे लगता है कि wii, xbox, और ps3 के बीच एक गेम पोर्टिंग को आसान बनाने के लिए उपकरण हैं, लेकिन महंगा मैं शर्त लगाऊंगा।

पीएस 3 में ब्लू रे समर्थन के माध्यम से जावा है। बीडी-जे साइट देखें।


Answer #5

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

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

ऐसा नहीं है कि जावा धीमा है। यह है कि रीयलटाइम कार्यों को संभालने में जावा अच्छा नहीं है।


Answer #6

विकिपीडिया पर गेम इंजनों की सूची प्रोग्रामिंग भाषा के साथ-साथ कई गेम इंजनों को सूचीबद्ध करती है।

सूचीबद्ध कई जावा गेम इंजन हैं।

कुछ लिंक पर क्लिक करने से आपको जावा में लिखे गए गेम और डेमो के उदाहरण मिलेंगे। यहां एक जोड़ा है:

कुछ गेम और परिस्थितियों के लिए, जावा के व्यापार-बंद स्वीकार्य हो सकते हैं।


Answer #7
  • क्या गेमिंग इंजन / पुस्तकालयों के कोई अच्छे बंदरगाह हैं?
  • कई सी / सी ++ डेवलपर्स, विशेष रूप से विंडोज़ पर (जहां अधिकांश वाणिज्यिक गेम लिखे जाते हैं) विजुअल स्टूडियो से परिचित हैं। आईडीई में कोई तुलना नहीं है।
  • आम तौर पर, जावा को ठोस टाइपिंग के कारण व्यवसायों को बेचा गया है और इसमें स्मृति प्रबंधन के मुद्दों के बारे में कोई धारणा नहीं है।
  • और हां, जावा अभी भी एक धारणा से पीड़ित है कि यह धीमा है, और यह स्मृति प्रबंधन खराब है, और गेम के लिए, यह संभवतः कार्य के लिए उपयुक्त है। जैसा कि कुछ अन्य उत्तरों में बताया गया है, कचरा संग्रह केवल उस समय कटौती नहीं करेगा जब आप रीयल-टाइम उच्च-प्रदर्शन आवश्यकताओं से निपट रहे हों। वीडियो गेम सीपीयू और जीपीयू को अपनी सीमा तक धक्का देते हैं।

Answer #8

पहले मामूली अंक:

  • जावा से कोई उत्पादकता वृद्धि hypothetical है। वाक्यविन्यास लगभग सी ++ के समान है, इसलिए आप वास्तव में स्मृति प्रबंधन और मानक पुस्तकालयों से बचत पर बैंकिंग कर रहे हैं। पुस्तकालयों में गेम डेवलपर्स की पेशकश करने के लिए बहुत कुछ नहीं है और कचरा संग्रह के कारण स्मृति प्रबंधन एक विवादित मुद्दा है।

  • क्रॉस-प्लेटफॉर्म "फ्री के लिए" उतना अच्छा नहीं है जितना आप सोचते हैं क्योंकि कुछ डेवलपर्स ओपनजीएल का उपयोग करना चाहते हैं और कई प्रमुख प्लेटफार्मों में शायद उनके मूल पुस्तकालयों के लिए एक अच्छा जावा कार्यान्वयन या रैपर नहीं है, चाहे ग्राफिक्स, ऑडियो, नेटवर्किंग आदि के लिए।

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

खेल डेवलपर्स की पसंद की भाषा के रूप में सी ++ को सही ढंग से सुपरसीड करने के लिए, इसे दो चीजों में से एक करना होगा:

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

विशेष रूप से, मुझे नहीं लगता कि जावा उनमें से किसी एक से मिलता है। एक उच्च स्तरीय भाषा दूसरे से मिल सकती है, अगर कोई पायनियर होने के लिए बहादुर है। (ईवीई ऑनलाइन संभवतः हमारे पास पाइथन का उपयोग करने योग्य सबसे अच्छा उदाहरण है, लेकिन जो मुख्य पायथन भाषा का एक कांटा, प्रदर्शन के लिए कई सी ++ घटक का उपयोग करता है, और यहां तक ​​कि आधुनिक शब्दों में काफी अमानवीय खेल के लिए भी है।)


Answer #9

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

संपादित करें: यह कहना है कि यह "गति" या "सही पुस्तकालयों" समस्या से अधिक है। ये दो चीजें इस के साथ हाथ में आती हैं, लेकिन यह एक और बात है कि "मैं सेल जैसे सिस्टम को जावा कोड कैसे चला सकता हूं? वास्तव में कोई भी अच्छा जावा कंपाइलर नहीं है जो पाइपलाइनों और वैक्टरों का प्रबंधन कर सकता है जैसे मुझे चाहिए .. "


Answer #10

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


Answer #11

जावा में रेजस्केप जावा में लिखा गया है, "वीडियो गेम" टैग विशेष रूप से इसे ऑन-लाइन गेम के रूप में लागू नहीं कर सकता है, लेकिन इसका एक सभ्य अनुसरण है।


Answer #12

एक बात के लिए, जावा की ऑपरेटर ओवरलोडिंग की कमी से आपको गणित पाइपलाइन को बहुत ही परेशान करने और पढ़ने में मुश्किल होने के लिए निपटने के लिए सभी गणित मिलते हैं।

सभी मैट्रिक्स गुणा और एफ़िन वैक्टर जिन्हें आप से निपटने की ज़रूरत है, उनका पालन करना बहुत आसान है यदि वे वस्तु-उन्मुख अभिव्यक्तियों की बजाय अच्छी तरह से गठित गणितीय अभिव्यक्तियों में हैं

product = vector.multiply(projectionMatrix).dotProduct(otherVector);

यह सिर्फ भयानक है। गणित ऐसा नहीं दिखना चाहिए।


Answer #13
  1. जावा धीमा है, भारी भारोत्तोलन जीपीयू द्वारा नियंत्रित नहीं किया जाता है। अभी भी एनीमेशन, भौतिकी, और एआई सीपीयू को मार रहा है, जिनमें से सभी बहुत समय लेने वाली हैं।

  2. जावा कंसोल पर मौजूद नहीं है, और कंसोल वाणिज्यिक खेलों के लिए एक प्रमुख लक्ष्य है। यदि आप पीसी पर जावा का उपयोग करते हैं, तो आप उचित समय और बजट के भीतर बंदरगाहों को बंदरगाह की अपनी क्षमता को समाप्त कर रहे हैं।

  3. जावा उद्योग लोकप्रिय होने से पहले गेम उद्योग में कई अनुभवी कोडर सी और सी ++ का उपयोग कर रहे हैं। उपर्युक्त दो बिंदु इस में योगदान दे सकते हैं, लेकिन मुझे उम्मीद है कि कई पेशेवर गेम कोडर वास्तव में जावा को वास्तव में नहीं जानते हैं।

  4. उपरोक्त मिडलवेयर के बारे में किसी और का मुद्दा अच्छा था, इसलिए मैं इसे अपने उत्तर में जोड़ रहा हूं। सी / सी ++ के साथ विशेष रूप से लिंक करने के लिए विशेष रूप से लिखे गए बहुत सारे विरासत कोड और मिडलवेयर हैं, और आखिरी बार मैंने जावा की जांच की है, इसमें अच्छी इंटरऑपरेबिलिटी नहीं है। अधिकांश कंपनियों के लिए जावा का उपयोग करने में बहुत सारे कोड फेंकना शामिल होगा, जिनमें से अधिकतर एक या दूसरे तरीके से भुगतान किया गया है।


Answer #14

यहां तक ​​कि नेट प्लेटफॉर्म पर लिखे गए गेम अक्सर गति के लिए अत्यधिक अनुकूल होते हैं जैसे मेमोरी और बस तक सीधे पहुंच। .Net सी / सी ++ का उपयोग करने की अनुमति देता है और इसे उच्च स्तर की भाषाओं जैसे सी # के साथ मिलाता है।

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

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


Answer #15

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


Answer #16

प्रदर्शन मुद्दा पहला कारण है। जब आप क्विक इंजन ( http://www.codemaestro.com/reviews/9 ) में हैं तो हाइपर ऑप्टिमाइज्ड सी ++ कोड की तरह देखते हैं, तो आप जानते हैं कि वे वर्चुअल मशीन के साथ अपना समय बर्बाद नहीं कर पाएंगे।

निश्चित रूप से कुछ .NET गेम हो सकते हैं (कौन सा? मुझे रूचि है। क्या कुछ वास्तव में सीपीयू / जीपीयू-गहन लोग हैं?), लेकिन मुझे लगता है कि यह अधिक है क्योंकि बहुत से लोग एमएस प्रौद्योगिकियों में विशेषज्ञ हैं और लॉन्च होने पर माइक्रोसॉफ्ट का पीछा करते हैं उनकी नई तकनीक।

ओह और क्रॉस-प्लेटफॉर्म सिर्फ वीडियो गेम कंपनियों के दिमाग में नहीं है। लिनक्स बाजार के लगभग 1% है, मैक ओएस कुछ% अधिक है। वे निश्चित रूप से सोचते हैं कि विंडोज-केवल प्रौद्योगिकियों और डायरेक्टएक्स जैसे librairies डंपिंग के लायक नहीं है।


Answer #17

गेम मार्केटिंग एक वाणिज्यिक प्रक्रिया है; प्रकाशक अपने निवेश पर मात्रात्मक कम जोखिम वाले रिटर्न चाहते हैं। नतीजतन, फोकस आमतौर पर प्रौद्योगिकी की नकल (अपवादों के साथ) पर होता है कि उपभोक्ता विश्वसनीय रिटर्न का उत्पादन करने के लिए खरीद लेंगे - ये लेंस चमक या उच्च रिज़ॉल्यूशन जैसे सतही दृश्य प्रभाव होते हैं। ये प्रभाव विश्वसनीय हैं क्योंकि वे बस प्रसंस्करण शक्ति में वृद्धि का उपयोग करते हैं - वे हार्डवेयर / मूर के कानून बढ़ने का फायदा उठाते हैं। इसका मतलब है सी / सी ++ का उपयोग करना - आम तौर पर इन फायदों का फायदा उठाने के लिए जावा से जावा को भी सारणित किया जाता है।





java