Tweaking और सेटिंग्स - रनटाइम चर संशोधन और दृढ़ता


19

अधिकांश कंपनियों में एक संपादक, या खेल में सामान को ट्विस्ट करने के लिए एक चर नियंत्रण प्रणाली है, लेकिन क्या इस समस्या का कोई मिडलवेयर समाधान है? मैंने अतीत में दो ऐसी प्रणालियां लिखी हैं, और पाँच के साथ काम किया है, शायद छह अलग-अलग लोगों ने, लेकिन उनमें से कोई भी शेल्फ से दूर नहीं था।

इन घरेलू समाधानों में से प्रत्येक में समस्याएं थीं, मूल्यों को देखते रहने से लेकर, चर की वर्तमान स्थिति को बचाने में सक्षम नहीं होने तक।

क्या कोई परिपक्व विन्यास / रनटाइम-वैरिएबल कंट्रोल लाइब्रेरी / एप्स हैं?

मैं आमतौर पर C ++ में कोड देता हूं, लेकिन मुझे लगता है कि एक परिपक्व सेटिंग्स / चर संपादक शायद सॉकेट आधारित (और कुछ हद तक भाषा अज्ञेय) होगा क्योंकि Nintendo के सामान के अलावा सभी वर्तमान विकास हार्डवेयर सर्वर से बात करने के लिए एक तंत्र प्रदान करता है। कोड कार्यान्वयन भी काफी सरल होने की आवश्यकता होगी (मैं Oskar द्वारा साझा किए गए hot_var / TweakableConstants लेख को पसंद करता हूं, लेकिन यह पैकेज नहीं है)

जवाबों:


8

मुझे पसंद है कि नोएल ने अपने ब्लॉग पर क्या प्रस्ताव दिया। एक टेलनेट आधारित वैरिएबल ट्विकर । टेलनेट का उपयोग करके वह चर को संपादित करने के लिए किसी भी टेलनेट क्लाइंट का उपयोग करने में सक्षम था। बाद में उन्होंने प्रोटोकॉल के आसपास एक गुई का निर्माण किया। यह पर्याप्त रूप से सरल लगता है, कि यह संभवतः मिडलवेयर लाइब्रेरी के लायक नहीं है, लेकिन उसके कोड को देखना उपयोगी हो सकता है।

मैं हालांकि उनकी लुआ विरोधी भावना से असहमत हूं। एक रिमोट लुआ कंसोल सिर्फ कमाल का लगता है।


उन्होंने MotoGP पर भी ट्विन
Kylotan

3
टेलनेट क्यों? HTTP / HTML, यार! HTTP एक बहुत ही सरल प्रोटोकॉल है और इसे आसानी से एक गेम में एम्बेड किया जा सकता है - मैंने इसे पहले भी किया है, यह कोड की एक हजार लाइनों के तहत अच्छी तरह से था।
ज़ोरबहुत

3
मैं कहूंगा कि टेलनेट बहुत अच्छा काम करता है और बहुत कम जटिल है। आप इसे 1000 के बजाय कोड की 100 लाइनों में कर सकते हैं। और यह चुनावों को आगे बढ़ाने और खींचने के बजाय अपडेट को आगे बढ़ाने की अनुमति देता है। लेकिन अगर आपको अपने खेल में किसी अन्य उद्देश्य के लिए HTTP की आवश्यकता है, तो मैं सहमत हूँ कि यह यहाँ भी उपयोग करने लायक है।
काइलोटन सेप

5

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

उदाहरण:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

Hमैक्रो की तरह कुछ करने के लिए फैलता है HotValue(x, __FILE__, __LINE__, __COUNTER__)। यह कुछ वैश्विक रजिस्ट्री के लिए मान पंजीकृत करता है। फिर एक फ़ंक्शन ऐसा होता है RefreshHotValues()जिसे आप नियमित अंतराल पर कॉल करते हैं। फ़ंक्शन रजिस्ट्री में प्रत्येक प्रविष्टि को देखता है, विशिष्ट स्रोत फ़ाइल को पार्स करता है और हॉट वैल्यू को पुनः लोड करता है।

जैसा कि आप वास्तविक स्रोत कोड को संशोधित करते हैं, आपके पास दृढ़ता है।

जाहिर है कि यह काम नहीं करेगा जहां H()हर फ्रेम का मूल्यांकन नहीं किया गया है, लेकिन इसे हल करने के तरीके हैं जैसा कि यहां चर्चा की गई है

आप इस विचार का विस्तार सॉकेट-आधारित समाधान पर कर सकते हैं, शायद। HotValue()प्रत्येक फ्रेम को कॉल करने के लिए एक महत्वपूर्ण प्रदर्शन ओवरहेड हो सकता है , लेकिन जैसा कि आप बहुत आसानी से मैक्रो को पूरी तरह से संकलित कर सकते हैं, इसे पूरी तरह से बदलने के साथ यह एक मुद्दा नहीं है।


2
@ कायलोटन: आप इस बिंदु को याद कर रहे हैं। आप वास्तविक स्रोत कोड को संशोधित कर रहे हैं, जो रन-टाइम पर पार्स हो जाता है। दृढ़ता संशोधित स्रोतों के माध्यम से है।
Oskar N.

हाँ, किसी तरह मैं इस लेख को छोड़ने में चूक गया। मैं अपनी टिप्पणी हटा दूंगा और फिर से पढ़ूंगा!
काइलोटन

3
मैं सिर्फ मुझे हो सकता है लेकिन इस तकनीक को लगता है ... icky। मुझे लगता है कि यह इसलिए है क्योंकि मैंने जादू की संख्याओं से नफरत करने में बहुत समय बिताया है और यह केवल जादू की संख्या के लिए काम करेगा। मैं स्पष्ट रूप से देखना चाहूँगा कि रंग स्पष्ट रूप से एक विन्यास या स्क्रिप्ट फ़ाइल का हिस्सा है। जादू हॉट लोड संसाधनों की क्षमता के साथ आता है।
deft_code

@ कैस्पिन: आप सादे चर का उपयोग कर सकते हैं और इसके बजाय H(int, myvar, 5)जब फ़ाइल बदल जाती है तो आप myvarमेमोरी में बदल देते हैं । Mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.

1

AntTweakBar वास्तव में आप क्या करना चाहते हैं के लिए उपयोगी है, हालांकि, ज्यादातर समय, आप कुछ मैक्रोज़ या समान के साथ रिलीज में 'संकलन' करना चाहते हैं।


0

रीयल-टाइम डिबगिंग के बारे में एक सवाल से , आईओएस डेवलपर्स के लिए AsyncSocket के बारे में डेविड मैकग्रा का जवाब आता है। अधिक जानकारी के लिए उसका उत्तर देखें।


हालाँकि यह बहुत अच्छा लगता है, यह कोई समाधान नहीं है; यह एक समाधान बनाने के लिए एक उपयोगी उपकरण है।
रिचर्ड फैबियन

0

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


1
यह सेटिंग जानकारी के बारे में नहीं है, यह डिबगिंग या गेमप्ले के उद्देश्यों के लिए रनटाइम चर को ट्विक करने के बारे में है।

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

1
समस्या उन्हें वास्तविक समय में बदलने के लिए हो रही है। इसमें संभवत: DB पर किसी प्रकार का ट्रिगर सेट करना शामिल है, और गेम में कुछ ऐसा है जो उस ट्रिगर को हैंडल कर सकता है और मूल्यों को अतुल्यकालिक रूप से फिर से पढ़ सकता है जबकि खेल जारी है। अचूक नहीं, लेकिन बहुत सरल भी नहीं।
काइलोटन

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

-1

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

फिर, अपने खेल के साथ खिलवाड़ करना उतना आसान है जितना कि आपके फोन पर चीजों को छूना। आपके पास फोन पर कुछ टेक्स्टबॉक्स भी हो सकते हैं, जो गेम से रियलटाइम वैरिएबल वैल्यू दिखाते हैं, या आप लाइब्रेरी को आगे कर सकते हैं stdinया stderrफोन पर एक टेक्सचर को स्क्रॉल कर सकते हैं । विकल्प असीम हैं!

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

मुझे ऐसा नहीं लगता कि ऊपर लिखा गया है, लेकिन मैं इसे लिखने पर जोर दे रहा हूं। (मैं अभी तक अपने खुद के खेल के विकास में अभी तक पर्याप्त नहीं मिला है इसकी आवश्यकता है)

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


यह एक कार्यालय के माहौल में मीठा होगा। एक कलाकार से बात करने के लिए आगे बढ़ें, और पड़ोसी डिजाइनर के दौड़ने वाले खेल से जुड़ना शुरू करें, जबकि वह कुछ मुठभेड़ों को स्थापित करने की कोशिश कर रहा है ...
डैश-टॉम-बैंग

1
आपके कंप्यूटर पर आपके द्वारा वास्तव में विकास करने के बजाय मैं इसे अपने फोन पर होने के लाभ को नहीं समझता।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.