मैं एक छोटा सॉकर गेम डिजाइन कर रहा हूं जहां गेम इंजन (जो खिलाड़ी चाल आदि की गणना करता है) सर्वर पर चलता है, और प्रतिपादन और कीबोर्ड/माउस हैंडलिंग क्लाइंट द्वारा किया जाता है। सर्वर (हास्केल) के लिए मैं खेल इंजन हास्केल में गेम इंजन और नेटवर्क सर्वर को सिंक्रनाइज़ करने के लिए कैसे करें?
हर 20ms या तो के लिए
- Happstack उपयोग करना चाहते हैं, ग्राहक कीबोर्ड और माउस भेजना चाहिए HTTP GET के माध्यम से सर्वर पर ईवेंट, वर्तमान गेम स्थिति (JSON-encoded गेंद और प्लेयर स्थिति) प्राप्त करें और इसे प्रस्तुत करें। मैं खेल लूप, इनपुट हैंडलिंग और प्रतिपादन के लिए एसडीएल आधारभूत संरचना का उपयोग करने के बारे में सोच रहा हूं।
सर्वर मूल रूप से दो धागे चलाता है: एक happstack सर्वर HTTP GET प्राप्त करता है, कुंजीपटल/माउस कमांड को कतार में रखता है, दूसरी पंक्ति से वर्तमान गेम स्थिति पढ़ता है और HTTP GET अनुरोध का उत्तर देता है।
दूसरा धागा Yampa Arcade paper में वर्णित एक यम्पा गेम इंजन चलाता है: गेम इंजन जितनी जल्दी हो सके नए दौर की गणना करता है (कोई टिक नहीं) और परिणाम को रेंडर कतार में डाल देता है।
जनरल प्रश्न: यह एक व्यवहार्य वास्तुकला की तरह लग रही है?
विशिष्ट प्रश्न: कैसे एक सर्वर पक्ष प्रतिपादन कतार डिजाइन करेगा: क्या कोई इस के लिए चैन का उपयोग करेगा? यदि गेम इंजन क्लाइंट साइड पर "टिकिंग" की तुलना में औसत पर तेज है, तो कतार लंबी और लंबी हो जाएगी। चैन के साथ इसे कैसे संभाला जा सकता है?
आपकी टिप्पणियां बहुत स्वागत है!
बहुत बहुत धन्यवाद, बस जिस तरह का इनपुट मैं ढूंढ रहा था! सर्वर साइड रेंडरिंग के लिए: मैं गेम इंजन कंप्यूट प्लेयर और बॉल पोजिशन (केवल एक्स-, वाई-, जेड-कोऑर्डिनेट्स) चाहता था और क्लाइंट को इन्हें (कतार और HTTP प्रस्तुत करने के माध्यम से) भेजना चाहता था। मुझे अभी भी आपके लिंक के माध्यम से सभी तरह से काम करना है, लेकिन यह पहले से ही मुझे लगता है कि यह एक मृत अंत पहले ही यात्रा कर चुका है ... – martingw