मैं एक एमएमओ गेम के लिए एक आर्किटेक्चर बनाने की कोशिश कर रहा हूं और मैं यह नहीं समझ सकता कि मैं कितने चरों को स्टोर कर सकता हूं क्योंकि मुझे गेमऑब्जेक्ट्स में बहुत सी कॉल किए बिना चाहिए उन्हें एक ही समय में एक तार पर भेजें जब मैं उन्हें अद्यतन करता हूं।सी ++ सदस्य परिवर्तनीय परिवर्तन श्रोताओं (100+ कक्षाएं)
क्या मैं अब है:
Game::ChangePosition(Vector3 newPos) {
gameobject.ChangePosition(newPos);
SendOnWireNEWPOSITION(gameobject.id, newPos);
}
यह कोड बकवास करता है, कठोर, को बनाए रखने को समझते हैं, विस्तार करने के लिए। तो एक चैंपियन उदाहरण के बारे में सोच:
मैं हर चर के लिए कार्यों का एक बहुत बनाने के लिए होगा। और यह सिर्फ इस चैंपियन के लिए सामान्यीकरण है, मेरे पास प्रत्येक चैंपियन प्रकार/"कक्षा" के लिए 1-2 अन्य सदस्य चर हो सकते हैं।
यह सही होगा अगर मैं .NET या 0 समान से OnPropertyChange प्राप्त कर पाऊंगा।
हिमाचल प्रदेश के लिए:: जब मैं इसे अद्यतन, स्वचालित रूप से SendFloatOnWire("HP", hp);
पद के लिए कॉल करें: वास्तुकला मुझे लगता है कि करने के लिए अच्छी तरह से काम करेगा कोशिश कर रहा हूँ अगर मैं कुछ इसी तरह करना पड़ा है जब मैं इसे अद्यतन, स्वचालित रूप से फोन SendVector3OnWire("Position", Position)
नाम के लिए: जब मैं इसे अद्यतन, स्वचालित रूप से फोन SendSOnWire("Name", Name);
क्या हैं वास्तव में SendFloatOnWire
, SendVector3OnWire
, SendSOnWire
? उन कार्यों को जो चार प्रकार के चार बफर में क्रमबद्ध करते हैं।
या विधि 2 (preffered), लेकिन महंगा हो सकता है
अद्यतन अश्वशक्ति, स्थिति सामान्य रूप से और उसके बाद हर नेटवर्क थ्रेड टिक स्कैन बदली हुई चर के लिए सर्वर पर सभी GameObject उदाहरणों और उन भेजें।
इसे उच्च स्तरीय गेम सर्वर पर कैसे लागू किया जाएगा और मेरे विकल्प क्या हैं? ऐसे मामलों के लिए कोई उपयोगी किताब?
क्या मैक्रोज़ उपयोगी साबित होंगे? मुझे लगता है कि मुझे कुछ समान स्रोत कोड के बारे में बताया गया था और मुझे लगता है कि यह मैक्रोज़ का इस्तेमाल करता है।
अग्रिम धन्यवाद।
संपादित करें: मुझे लगता है कि मुझे एक समाधान मिला है, लेकिन मुझे नहीं पता कि यह वास्तव में कितना मजबूत है। मुझे इसमें जाना होगा और देखें कि मैं बाद में कहां खड़ा हूं। https://developer.valvesoftware.com/wiki/Networking_Entities
क्या आप वाकई सर्वर खेल चल रहा है, और ग्राहक सिर्फ एक गूंगा रेंडरर नहीं बनना चाहते हैं? इस तरह आपको तार पर इन सभी विशेषताओं को भेजने की ज़रूरत नहीं है (और यह धोखाधड़ी को रोकने में मदद करता है क्योंकि ग्राहक को बेईमान मूल्यों की रिपोर्ट करने के लिए छेड़छाड़ नहीं की जा सकती है)। – Cornstalks
यह ठीक है कि यह कैसे काम करता है, लेकिन मुझे अभी भी क्लाइंट को सूचित करना होगा कि उसे क्या प्रस्तुत करना है। – ioanb7
चेंजपोशन() सिर्फ एक उदाहरण है जहां ग्राहक निर्णय लेता है कि वह कहां जाना चाहता है। यह सिर्फ एक लक्ष्य है, सर्वर तय कर सकता है कि यह मान्य है या नहीं, आदि। मैंने इसे पूरी तरह से एक उदाहरण के रूप में दिया है। – ioanb7