नेटवर्किंग के एकीकरण के कारण क्या मुझे अपना भौतिकी इंजन लिखना चाहिए?


11

मैं वर्तमान में एक टॉप डाउन, रियलटाइम, ज़ोंबी शूटर विकसित कर रहा हूं। मैं जावा में यह कोडिंग कर रहा हूं, मेरे भौतिकी इंजन के रूप में JBox2D का उपयोग कर रहा हूं। मैं इस हफ्ते नेटवर्किंग को कोड कर रहा हूं, और अब मैं फिजिक्स सिंक्रोनाइजेशन पर निर्भर हूं।

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

मेरी समस्या यह है, मेरा वर्तमान भौतिकी इंजन, JBox2D (मूल रूप से Box2D का एक बंदरगाह), दुनिया को वापस चलाने का समर्थन नहीं करता है, और जाहिर है कि दुनिया के डेटा को क्रमबद्ध करना आसान नहीं है। मेरे पास 2 समाधान हैं, मैं अपने वर्तमान भौतिकी इंजन को संशोधित / विस्तारित कर सकता हूं, या अपना खुद का लिख ​​सकता हूं।

मेरे खुद के भौतिकी इंजन लिखने के कारण -

  • मैं अनावश्यक सुविधाओं को हटा सकता हूं। एक शीर्ष डाउन गेम में, मुझे केवल टकराव यांत्रिकी, और हैंडलिंग बलों की आवश्यकता होती है। कोई गुरुत्वाकर्षण शामिल नहीं है।
  • मैं कोड को बेहतर तरीके से समझ सकता हूं, और रोल बैक फ़ंक्शंस को लागू करने के लिए [सबसे अधिक संभावना है] यह आसान होगा

JBox2D को बढ़ाने / संशोधित करने के कारण

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

तो आपकी क्या राय हैं यह मेरा पहला गेम है, और मैं कोई पेशेवर गेम डेवलपर नहीं हूं। यदि कोई पहले से ही क्षेत्र में काम करने के लिए कुछ लिंक प्रदान कर सकता है (अधिमानतः JBox2D / Box2D / Java का उपयोग करके)।


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

जवाबों:


7

2 डी में टकराव का पता लगाना बहुत आसान है, मुझे नहीं पता कि आप पहली बार में भौतिकी इंजन का उपयोग करने से क्यों परेशान होंगे। और चूंकि सभी हैंडलिंग बल सीधे आगे या एक वक्र पर हैं (कोई गिरते हुए, परिवर्तनशील निदान आदि) व्यक्तिगत रूप से यह मेरे लिए कोई दिमाग नहीं है जिसे आपको चुनना चाहिए। अपना बनाना सरल है। टकराव:

2 आयतों में हो सकने वाली 3 संभावित टक्करों के लिए खाता:

  1. एज टू एज: बहुत सरल, आपको एक किनारे की धुरी मिलती है, और दूसरी और आप तय करते हैं कि वे एक ही स्थान पर कब्जा करते हैं या इसके पास पर्याप्त हैं।
  2. एज टू कॉर्नर: यह आसानी से सबसे आम होगा यदि आपके पास घूर्णन आकृतियाँ हैं। सौभाग्य से, इसे लागू करना भी काफी सरल है।
  3. कॉर्नर टू कॉर्नर: यह शायद ही कभी ऐसा होगा जो इसे लागू करने के लायक भी नहीं है। इसका कारण यह है, कि 2 चीजें पिछले गणना किए गए दशमलव के बराबर आपके इंजन के नीचे एक ही सटीक अक्ष पर बिल्कुल विपरीत दिशाओं में चलती होंगी। अब, अगर सब कुछ 45 या 90 डिग्री से घूमता है, तो यह MAY (यहां तक ​​कि शायद अभी भी नहीं) लायक है

संपादित करें: जैसा कि टिप्पणी की गई है, मैं इस मामले से बहुत कम परिचित हूं, और बुलेट / प्रोजेक्टाइल टक्कर के बारे में परामर्श नहीं किया जाना चाहिए।

जब मैंने 2 डी स्पेस में गोलियों के साथ काम किया है, तो मैंने एक तरह की पाथिंग का इस्तेमाल किया, जो स्ट्रेट लाइन में काम करती है और कर्व्ड होती है, जहां मैं फिजिक्स इंजन का उपयोग करके प्रोजेक्टाइल को फेंक देती हूं (जो कि मैंने स्क्रैच से नहीं बनाया था) और स्टैंडर्ड टक्कर का उपयोग करती हूं।

टिप्पणियों में खरोंच से इसे बनाने के बारे में पढ़ें।


संपादित करें: * मुझ पर भरोसा करें, * इसकी परवाह किए बिना, आपको अपने गेम इंजन में डेड रेकिंग के कुछ प्रकार की आवश्यकता होगी, क्योंकि प्रोजेक्टाइल और कितने प्रोजेक्टाइल किसी भी समय स्क्रीन पर हो सकते हैं। आप ABSOLUTELY स्क्रीन पर प्रत्येक फ्रेम पर दिए गए स्थान पर हर एक बुलेट को अपडेट नहीं करना चाहते हैं। लेकिन यह एक खेल को अनपेक्षित रूप से धीमा करने का एक शानदार तरीका है: डी! आपको केवल इन चीजों को अपडेट करना चाहिए:

  • एक प्रक्षेप्य फेंका जा रहा है
  • जिस दिशा में इसे फेंका जा रहा है
  • कर्व्ड है या नहीं
    • और यदि हां, तो वक्र का कार्य क्या है
  • यह क्या प्रक्षेप्य है (यह ग्राफिक, प्रभाव, क्षति, सब कुछ के लिए खाता है)

अब उस डेटा के अनुसार इंजन में डेटा को अपडेट करें, बजाय प्रत्येक लानत प्रोजेक्टाइल के सर्वर पर, और हर एक बुलेट के लिए पैकेट डेटा भेजें। (स्क्रीन पर सिर्फ 2 मशीन गन के साथ ऐसा करने की कल्पना कीजिए! यीशु!)


बेशक, इसे लागू करना अपेक्षाकृत आसान है, लेकिन मैं टकराव का पता लगाने के अनुकूलन में भी दिलचस्पी रखता हूं, जिसे लागू करने का कोई विचार नहीं है।
liamzebedee

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

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

सिवाय जब मैं टकराव के सर्वर साइड को संसाधित कर रहा हूं, जिसमें मुझे कई खिलाड़ियों आदि के लिए टकराव का पता लगाने की आवश्यकता है
liamzebedee

4
@MadPumpkin: आपका अति आत्मविश्वास आपके जवाब पर बुरी तरह से प्रतिबिंबित होता है; आप टकरावों का पता लगाने के बारे में बात कर रहे हैं, फिर भी आप स्वीप टकराव का पता नहीं लगाते हैं जो 2 डी शूटर में उचित बुलेट हैंडलिंग के पूर्ण मूल पर है। इसके अलावा, यहां तक ​​कि स्वीपिंग के साथ, रिज़ॉल्यूशन भी उतना ही महत्वपूर्ण है जितना कि यह पता लगाने की आवश्यकता है कि आपको यह तय करने की आवश्यकता है कि कौन सी टक्कर पहले हुई, संभावित संघर्षों को हल करें, और संभवत: हटाए गए संस्थाओं के मामले में पूरे रिज़ॉल्यूशन को फिर से शुरू करें। निश्चित रूप से नहीं तुच्छ मामला है कि आप इसे लागू करते हैं।
सैम होसेवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.