वैचारिक रूप से, एक गेम में रीप्ले कैसे काम करता है?


145

मैं उत्सुक था कि कैसे रिप्ले को एक गेम में लागू किया जा सकता है।

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

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


10
मूल स्टार क्राफ्ट रिप्ले वास्तव में सुसंगत नहीं थे। आप एक ही खेल को दो बार देख सकते हैं, और कुछ बल्कि अलग परिणाम देख सकते हैं।
एंड्रेस

1
@ संकेत: दिलचस्प है, मैंने ध्यान नहीं दिया था। विशेष रूप से, आरटीएस शैली के लिए, मैं कंपनी ऑफ हीरोज के बारे में सोच रहा था।
स्टीवन एवर्स

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

1
@ सीन ओ'होलरन: हाँ, यह सही है।
स्टीवन एवर्स

1
फिर मैं कार रेसिंग गेम्स के लिए भी जोड़ूंगा जहां रिप्ले लगभग डिफ़ॉल्ट हैं। मुझे पूरा यकीन है कि मॉडल का स्थान रिकॉर्ड किया गया है और फिर सब कुछ इंजन के माध्यम से चलता है।
d -_- b

जवाबों:


61

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


फ्रेम नंबर एक अच्छा संदर्भ नहीं हो सकता है क्योंकि रिप्ले लाइव गेम की तुलना में एक अलग फ्रैमरेट पर चल सकता है।
बेन एस

5
@ बान: फ्रामर्ट से कोई फर्क नहीं पड़ता, क्योंकि फ्रेम नंबर अभी भी वही होंगे। यह सही जवाब है।
ब्लूराजा - डैनी पफ्लुगुफ्ट

14
ग्राफ़िकल फ़्रेम और इंजन 'फ़्रेम' (या पुनरावृत्तियाँ) आवश्यक रूप से समान नहीं हैं। कई पुराने खेलों में, इंजन एक मास्टर लूप में ग्राफिक्स के समान दर पर अद्यतन किया गया। आधुनिक इंजनों के साथ, ग्राफिक्स को अक्सर GPU के रूप में तेजी से अपडेट करने की अनुमति दी जाती है, इंजन के साथ-साथ खेल की गतिशीलता (अक्सर एक भौतिकी इंजन) के अच्छे, सुसंगत रिज़ॉल्यूशन के लिए आवश्यक स्तर पर टिक होता है।
डैन ब्रायंट

3
@ सियागोपाल: यदि आप छद्म यादृच्छिक संख्या जनरेटर की स्थिति जानते हैं, तो वह समस्या पहले से ही हल है। एक और तरीका हो सकता है कि यादृच्छिक संख्याओं को इनपुट के एक अन्य रूप के रूप में माना जाए और उन लोगों के साथ कीपेस और इस तरह सेव करें।
काइलोटन

1
मैं यह स्वीकार करना चाहता हूं कि इस दृष्टिकोण की आवश्यकता है कि आपका गेम इंजन नियतात्मक है और यह एक निश्चित समय कदम के साथ संचालित होता है। मेरा मानना ​​है कि सभी बर्फ़ीला तूफ़ान RTS खेल इस तरह से बनाया गया है। गैर-नियतात्मक खेलों में लंबे समय में स्थिरता सुनिश्चित करने के लिए अतिरिक्त सिंक्रनाइज़ेशन डेटा शामिल होगा।
जॉन लेइडरग्रेन

28

Starcraft और Starcraft: Brood War में एक रिप्ले फीचर था। एक मैच पूरा होने के बाद, आप रीप्ले को बाद में देखने के लिए सहेजना चुन सकते हैं। पुनरावृत्ति करते समय, आप नक्शे के चारों ओर स्क्रॉल कर सकते हैं और इकाइयों और इमारतों पर क्लिक कर सकते हैं, लेकिन उनके व्यवहार को नहीं बदल सकते।

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

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

यदि आप एक रिप्ले इंजन लिख रहे हैं तो कुछ बातों को ध्यान में रखें।


6
+1: बहुत दिलचस्प है। मैंने उसके बारे में कभी नहीं सुना था। कुछ अच्छी अंतर्दृष्टि प्रदान करता है कि उन्होंने इसे कैसे विकसित किया।
स्टीवन एवर्स

18

दो प्रमुख विधियाँ हैं:

  1. घटनाओं को संग्रहीत करना (जैसे खिलाड़ी / ऐ क्रिया) - जैसा आप कहते हैं।
  2. स्टोरिंग स्टेट (पूर्ण गेम स्टेट, ऑब्जेक्ट्स के फ़े स्थान, लगातार क्षणों में)।

यह आप पर निर्भर करता है की आप क्या करना चाहते हो। कभी-कभी भंडारण की घटनाएं बेहतर होती हैं, क्योंकि यह आमतौर पर बहुत कम स्मृति लेता है। दूसरी तरफ यदि आप रिप्ले प्रदान करना चाहते हैं जो विभिन्न गति से और विभिन्न शुरुआती बिंदुओं से खेला जा सकता है, तो राज्यों को स्टोर करना बेहतर है। जब आप बताते हैं कि आप यह भी तय कर सकते हैं कि हर घटना के बाद उन्हें स्टोर करें या प्रति सेकंड केवल 12 या 25 बार फाइट करें - इससे आपके रीप्ले का आकार कम हो सकता है और उन्हें फिर से आगे / तेज करना आसान हो सकता है।

ध्यान दें कि "राज्य" का मतलब ग्राफिकल राज्य नहीं है। इकाई की स्थिति, संसाधनों की स्थिति आदि जैसी कुछ और बातें। ग्राफिक्स, कण प्रणाली और इतने पर चीजें आमतौर पर नियतात्मक हैं और "एनीमेशन एक्स, समय वाई: जेड" के रूप में संग्रहीत किया जा सकता है।

कभी-कभी रिप्ले को एंटीचिंग स्कीम के रूप में उपयोग किया जाता है। तब भंडारण की घटना शायद यहाँ सबसे अच्छी है।


10

तकनीकी रूप से आपको अपने इंजन को निर्धारक होने के लिए लिखना चाहिए, यह कोई यादृच्छिकता नहीं है। खेल में एक चरित्र को एक प्रतिद्वंद्वी की बांह पर निशाना बनाना, और एक हथियार फायर करना है, तो सभी मामलों में प्रतिद्वंद्वी को उसी तरह की क्षति को लागू किया जाना चाहिए।

मान लें कि स्थान X पर एक बम विस्फोट हुआ है, तो उस विस्फोट से उत्पन्न कणों का परिणाम हमेशा एक ही दृश्य के रूप में होना चाहिए। यदि आपको यादृच्छिकता की आवश्यकता होती है, तो यादृच्छिक संख्याओं का एक सेट बनाएं, गेम खेले जाने पर एक बीज मान का चयन करें और उस बीज मान को रीप्ले में सहेजें।

सामान्य तौर पर एक खेल में यादृच्छिकता एक बुरा विचार है। यहां तक ​​कि मल्टीप्लेयर जैसी चीजों के लिए, आप अपने आधे खिलाड़ियों को एक विस्फोट के चारों ओर देखने में सक्षम नहीं हो सकते हैं, जबकि अन्य केवल इसलिए नहीं कर सकते क्योंकि उन्हें सही यादृच्छिक मूल्य नहीं मिला था।

सब कुछ निर्धारक बनाएं, और आपको ठीक होना चाहिए।


1
ऐ के बारे में क्या? क्या AI यादृच्छिक नहीं है?
जेसी जशिंस्की

18
यह वास्तव में आवश्यक नहीं है। सभी यादृच्छिक घटनाओं के लिए वरीयता प्राप्त छद्म यादृच्छिक संख्याओं का उपयोग करें और रीप्ले फ़ाइल में बीज को बचाएं। इस तरह से रिप्ले के दौरान समान "रैंडम" नंबर जेनरेट किए जाएंगे।
बेन एस

13
-1 कंप्यूटर में "यादृच्छिकता" कैसे काम करती है, इसकी स्पष्ट गलतफहमी के लिए
ब्लूराजा - डैनी पफ्लुगुफ्ट

10
उम .... नहीं .... मैं पूरी तरह से जानता हूं कि "सत्य" यादृच्छिकता जैसी कोई चीज नहीं है। हालाँकि अधिकांश लोग सिस्टम समय जैसी किसी चीज़ के लिए अपने यादृच्छिक बीज को सेट करके इसके चारों ओर जाने की कोशिश करते हैं। हालाँकि मैं जो कह रहा हूँ वह यह है कि ऐसा नहीं किया जाना चाहिए। मुझे परवाह नहीं है अगर वह सिस्टम एपीआई या यादृच्छिक संख्याओं की पूर्वनिर्धारित तालिका का उपयोग करता है। मैंने मूल रूप से जो कहा वह सही था। उसके इंजन में प्रत्येक फ़ंक्शन को उसके इनपुट के आधार पर समान परिणाम का उत्पादन करना चाहिए। समय कभी भी एक कारक नहीं होना चाहिए।
टिमोथी बाल्ड्रिज

2
यदि कणों का किसी भी सार्थक तरीके से गेम मैकेनिक्स के साथ कोई संपर्क नहीं है, तो यह वास्तव में कोई फर्क नहीं पड़ता कि RNG उनके लिए अलग हैं। यह नेटवर्क-सिंक किए गए सिमुलेशन के मामले में मदद करेगा (जैसा कि अधिकांश आरटीएस गेम में मामला है, और गेम की अन्य शैलियों में से एक है), क्योंकि यह थोड़ा कम है हर फ्रेम को सिंक करने के लिए (कण प्रभाव बस मिलता है) व्यक्तिगत रूप से अद्यतन)।
RCIX

10

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

पुन: होने के लिए यादृच्छिक घटनाओं को प्राप्त करने के लिए, वरीयता प्राप्त छद्म यादृच्छिक संख्याओं का उपयोग करें और रीप्ले फ़ाइल में बीज को बचाएं

जब तक आप बीज से यादृच्छिक संख्याओं को उत्पन्न करने के लिए एक ही एल्गोरिदम का उपयोग करते हैं, तब तक आप सभी घटनाओं को फिर से बना सकते हैं जैसे कि वे लाइव गेम में खेल राज्य के पूर्ण स्नैपशॉट की आवश्यकता के बिना हुए।

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


यदि आप हर कुछ सेकंड (5 या 10 कहते हैं) को फिर से बीजित करते हैं तो यह आपके रिप्ले स्ट्रीम में रिकॉर्ड करने के लिए काफी आसान होगा और आगे या पीछे कूदने की अनुमति भी देगा (अनिवार्य रूप से PRNG "मुख्य फ्रेम" के लिए)।
वेज

7

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


4

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

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


3

मेरे दो पेन्स को अंदर फेंक दो।

निर्भर करता है कि आप क्या चाहते हैं, फिर से खेलना के माध्यम से पूरा किया जा सकता है

  1. वीडियो बफर रिकॉर्ड करना और बाद में फिर से खेलना,
  2. हर फ्रेम पर ऑब्जेक्ट स्टेट कैप्चर करना और बाद में रीप्ले करना,

ज्यादातर समय, लोग एक इंटरैक्टिव रिप्ले चाहते हैं, इसलिए 2. जाने का रास्ता है। फिर आपकी बाधाओं के आधार पर इस प्रक्रिया को अनुकूलित करने के कई तरीके हैं

  • सुनिश्चित करें कि प्रणाली एक नियतात्मक सिमुलेशन * है, जैसे कि हर इनपुट एक सुसंगत और अपेक्षित आउटपुट उत्पन्न करता है
  • यदि यादृच्छिकता की आवश्यकता होती है, तो सुनिश्चित करें कि यादृच्छिक संख्याओं को बाद में बिल्कुल पुन: प्रस्तुत किया जा सकता है [छद्म यादृच्छिक संख्या जेनरेटर PRNG के साथ बोने पर नज़र डालें, या कैन्ड यादृच्छिक सेट का उपयोग करें]
  • खेल तत्वों को "मैकेनिक" और "सौंदर्यवादी" तत्वों में विभाजित करें। मैकेनिक तत्व परिणाम को प्रभावित करते हैं [जैसे स्तंभ गिरने और अवरुद्ध मार्ग], सौंदर्य तत्व शो के लिए होते हैं और सिस्टम में किसी भी निर्णय लेने की प्रक्रिया को प्रभावित नहीं करते हैं [जैसे स्पार्क जैसे दृश्य कण प्रभाव]।

यह वास्तव में एक आकर्षक विषय है। मुझे याद है कि मूल Xbox Wreckless के लिए एक लॉन्च शीर्षक में एक अच्छा प्लेबैक फीचर था। दुर्भाग्य से, एक से अधिक अवसरों पर रिप्ले खराब हो जाएगा;)

ओह, हाँ, कैसे कोई भूल सकता है Blinx समय स्वीपर ! महान इंटरैक्टिव फिर से खेलना है कि वास्तविक खेल मैकेनिक में शामिल किया गया था !


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


2

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

दिलचस्प सवाल है, हालांकि। मुझे इसमें दिलचस्पी होगी कि यह पेशेवर खेलों में कैसे होता है।


2

दान ब्रायंट

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

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

एक ही समय में बचने, लाखों पेड़ों और घास शाफ्ट स्थिति को स्टोर करने के लिए। स्पष्ट रूप से छद्म यादृच्छिक अनुक्रम किसी भी समय पुनरावृत्ति कर सकता है, क्योंकि तर्क तय हो गया है, बस संख्याओं के एक नकली सांख्यिकीय यादृच्छिक अनुक्रम बनाने के लिए।


यदि आप दान का ध्यान इस ओर आकर्षित करना चाहते हैं, तो उनके योगदान के तहत एक टिप्पणी जोड़ें - अन्यथा वह संभवतः इसे नहीं देखेंगे।
halfer

क्या यह कारण हो सकता है कि मैं सिर्फ एक अतिथि हूं, लेकिन मैं मूल पोस्ट में कोई भी "टिप्पणी जोड़ें" फ़ंक्शन नहीं देख सका, दान ने उत्तर दिया, अकेले दान का उत्तर दें। मैंने देखा कि एक संपादित-सुधार कार्य है, यहां तक ​​कि उन पदों के लिए भी, जो मेरे नहीं हैं, लेकिन यह कैसे काम करता है?
एंटोनियोस

आह, अच्छा सवाल! यहाँ ऐसा लगता है कि आपको अपने स्वयं के अलावा अन्य प्रश्नों या उत्तरों पर टिप्पणी करने के लिए 50 प्रतिनिधि बिंदुओं की आवश्यकता है - मेरी माफी। 50 हालांकि प्राप्त करना बहुत आसान है - बस उपयोगी योगदान के एक जोड़े को आमतौर पर वह प्राप्त होगा। हां, आप अन्य लोगों के प्रश्नों और उत्तरों को संपादित कर सकते हैं, हालाँकि आपके संपादन 2000 तक मिलने तक दूसरों द्वारा समीक्षा की जाएगी। अपने विशेषाधिकार चार्ट यहाँ देखें ।
रोकें

1

लगातार रिप्ले होने की समस्या एक ही (अच्छी तरह से, आसान) है जैसे एक सुसंगत मल्टीप्लेयर गेम।

जैसा कि पहले उल्लेख किया गया है, आरटीएस गेम में रिप्ले सभी इनपुट (जो एक प्रभाव है) रिकॉर्ड करके संग्रहीत किए जाते हैं। स्क्रॉलिंग का कोई प्रभाव नहीं होता है।) मल्टीप्लेयर सभी इनपुट को प्रसारित करता है, भी।

सभी इनपुट को रिकॉर्ड करना न केवल एक अनुमान है - यह खुलासा करने के साथ Warcraft3 रिप्ले पढ़ने के लिए एक पुस्तकालय है।

इनपुट में इस उत्तर के लिए टाइमस्टैम्प शामिल हैं।


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

-1

मुझे विश्वास है कि निश्चित वेतन वृद्धि पर खेल हर चीज की स्थिति (हर चीज) का एक स्नैपशॉट लेगा। फिर जब रीप्ले हो रहा है तो रैखिक-प्रक्षेप का सरल उपयोग "छेद" में भरने के लिए किया जा सकता है। कम से कम यही है कि मुझे लगता है कि यह किया जाएगा।

आप सही हैं कि इनपुट रिकॉर्ड करना अविश्वसनीय होगा / समान आउटपुट की गारंटी नहीं देगा। खेल निश्चित रूप से सभी वस्तुओं (या कम से कम महत्वपूर्ण वाले) की स्थिति का ट्रैक रखने के लिए है


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

@Peter, "एक ही इनपुट को खिलाने से परिणाम समान होगा": नहीं। कई खेलों में एक यादृच्छिक तत्व होता है, जो कि रिप्ले खेला जाता है, हर बार अलग हो सकता है। आपको इनपुट से अधिक का ट्रैक रखने की आवश्यकता है।

यह सच है। आपको अपने PRNGs (इस प्रश्न का मेरा उत्तर देखें) के बीज को संग्रहीत करने की आवश्यकता है।
पीटर रूडरमैन

1
मुझे पता है कि यह प्रदर्शन और मेमोरी की खपत है, लेकिन यदि आप इनपुट या यादृच्छिक जनरेटर के रूप में 1 छोटी सी चीज को याद करते हैं ... या वास्तव में कुछ भी, फिर से खेलना एक भयानक स्पर्शरेखा पर चला जाएगा!
बॉब फिनचेमर

@BlueRaja, बॉब की मेमोरी स्नैपशॉट विचार जरूरी नहीं है कि दूर की कौड़ी है, हालांकि एक अच्छा इंजन हर पुनरावृत्ति के लिए सभी मेमोरी एन्कोडिंग करने के बजाय राज्य 'डेल्टास' रिकॉर्ड कर सकता है। इंजन स्तर पर समर्थन करना संभव है। इसके अलावा, रैंडम बीजों को रिकॉर्ड करना रिवाइंड सपोर्ट के लिए पर्याप्त नहीं होगा, क्योंकि रैंडम प्रोग्रेस रैंडमनेस पर निर्भर सभी लॉजिक में विशेष सपोर्ट के बिना रिवर्सेबल प्रक्रिया नहीं है। इवेंट स्ट्रीम के भाग के रूप में यादृच्छिक परिचालनों के परिणामों को रिकॉर्ड करना अधिक लचीला है।
डैन ब्रायंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.