রিপ্লে সিস্টেম: রেকর্ড ইনপুট বা ইভেন্ট?


9

আমি এটি পড়েছি: কীভাবে একটি রিপ্লে সিস্টেম ডিজাইন করবেন তবে এটি আমার প্রশ্নের উত্তর দেয় না।

আমার গেমটি সার্ভার "মডেল" এবং "নিয়ামক" থেকে পৃথক প্রোগ্রাম হিসাবে গেমের ক্লায়েন্ট "ভিউ" দিয়ে তৈরি। (কিছুটা এমএমওর মতো, বা কোনও মাল্টিপ্লেয়ার গেমটি এভাবে নির্মিত)। সার্ভার সাইডটি সর্বদা গেমের "সত্য" থাকে, এটি কেবল ক্লায়েন্টদের আউটপুট এবং আউটপুট ইভেন্ট এবং "বর্তমান অবস্থা" বার্তাগুলির হিসাবে ক্রিয়া অনুরোধগুলি গ্রহণ করে।

গেমের মডেল এবং নিয়মগুলি একটি স্থির "টিক" আপডেট চক্রের সাথে সম্পূর্ণরূপে নির্বিঘ্নযুক্ত, তাই সার্ভারের পাশে আমি ক্লায়েন্টের ভিউগুলিতে প্রেরিত ইভেন্ট এবং ক্রিয়াকলাপের অনুরোধগুলি উভয়ই রেকর্ড করতে পারি। উভয়ই নির্দিষ্ট চক্র সংখ্যার সাথে সম্পর্কিত।

প্রশ্নটি হল: এই ক্ষেত্রে, একটি রিপ্লে সিস্টেম সেটআপ করতে, আমি কি ইনপুট, বা ব্যবহারকারীর ক্রিয়া অনুরোধগুলি (সেখানে প্রস্তাবিত হিসাবে) বা ইভেন্টগুলি ব্যবহার করব?

আমার কাছে মনে হচ্ছে যে উভয়ই ঠিক একই আউটপুট দেবে। কেবলমাত্র তফাতগুলি আমি দেখতে পাচ্ছি:

  • ইভেন্টগুলি ইভেন্টগুলিকে প্রকৃত আউটপুট দেয় যখন ইভেন্টগুলি দেওয়ার জন্য ক্রিয়া অনুরোধগুলি প্রক্রিয়া করতে হয় proces
  • অ্যাকশন অনুরোধগুলি রেকর্ড করতে খুব কম ডেটা হতে পারে।

অন্য কিছু বিবেচনা করার আছে?

উত্তর:


5

একটি নির্ণায়ক ব্যবস্থা দেওয়া হয়েছে তারা যুক্তিযুক্তভাবে সমতুল্য তাই আপনার সংক্ষিপ্তসারটি বেশ সঠিক। তবে আরও 2 টি জিনিস রয়েছে যা আউটপুট ইভেন্টের চেয়ে আমাকে ইনপুট ক্রিয়াকলাপ রেকর্ড করার জন্য দোলা দেয়:

  1. আপনি যদি ক্রিয়াগুলি সংরক্ষণ করেন তবে আপনি সেগুলি পরে ডেটা হিসাবে ডেটা হিসাবে ব্যবহার করতে পারেন, কারণ তারা কেবল আপনার ইভেন্টের পুনরায় খেলানোর চেয়ে আরও বেশি কোড প্রয়োগ করে। এটি ক্র্যাশ বাগগুলি নির্ণয় করতে, বিল্ডগুলির মধ্যে আচরণগত নিয়ন্ত্রণগুলি সন্ধান করা ইত্যাদিতে সহায়তা করতে পারে etc.
  2. ভবিষ্যতে আপনি নির্দিষ্ট ক্রিয়াকলাপের জন্য প্রেরিত ইভেন্টগুলি পরিবর্তন করতে পারেন বা কোনও কারণে বিভিন্ন ক্লায়েন্টকে বিভিন্ন ইভেন্ট প্রেরণ করতে পারেন। এই ক্ষেত্রে, রিপ্লেটি অবৈধ বা অসম্পূর্ণ হয়ে উঠতে পারে। তাত্ত্বিকভাবে একই সমস্যাটি ইনপুটগুলির ক্ষেত্রে প্রয়োগ করতে পারে তবে সাধারণত ইনপুটগুলির ডোমেন আউটপুটগুলির চেয়ে বেশি সীমাবদ্ধ থাকে এবং তাই যখন এটি ঘটে তখন পিছনের সামঞ্জস্যের সাথে সামঞ্জস্য করা খুব কম এবং সহজতর হয়। (ইনপুটগুলি প্লেয়ার এবং অন্যান্য ইনপুট উত্সগুলি (যেমন, এলোমেলো সংখ্যা জেনারেটর) কী করতে পারে তা সীমাবদ্ধ রয়েছে, তবে আউটপুটগুলিতে গেমের বিধি দ্বারা উত্পন্ন সমস্ত ইনপুট প্লাস এবং অন্য যে কোনও আউটপুট যেমন উপস্থাপনের ইঙ্গিত, সাময়িক সার্ভার- পার্শ্ব ইভেন্টগুলি, ইত্যাদি)

ভাল পয়েন্ট, বিশেষত প্রথম এক। আমি এই ব্যবহার সম্পর্কে ভুলে গেছি তবে এটি বেশ সহায়ক।
ক্লাইম

বিঙ্গো, বিশেষত # 1 এ। আমার যদি কিছু ইনপুট রেকর্ডিং সিস্টেম তৈরি করার সময় থাকে তবে আমি প্রতিটি পরীক্ষায় লগ করতে সক্ষম হব এবং কিছু হার্ড-টু-প্রজনন বাগগুলি ধরতে সক্ষম হব। এই "বিরল কেস" লগগুলি আবার লোড করতে সক্ষম হওয়ায় আপনার কোডটি দিয়ে পদক্ষেপ নেওয়ার সাথে সাথে বাগটি চিহ্নিত করা সহজ করে তোলে।
ক্রিসি

1

হয় কাজ করে, যদিও কিছু বিষয় বিবেচনা করার আছে।

প্রথমত, মনে রাখবেন যে আপনাকে সময় তথ্য রেকর্ড করতে হবে। যে কোনও ধরণের ভেরিয়েবল ফ্রেম রেট সহ গেমগুলির জন্য, এটি বিশেষত জটিল can আপনার রিপ্লে ডেটা গেমটি মূলত সিমুলেশনের জন্য ব্যবহৃত ঠিক একই সময়ের তথ্য সরবরাহ করতে পারে তা নিশ্চিত করতে হবে।

গেম আচরণের জন্য আপনার টুইটের জন্য অ্যাকাউন্টও করতে হবে। আপনি যদি ইনপুট রেকর্ড করেন এবং তারপরে কীভাবে ইনপুট পরিচালনা করা হয়, পদার্থবিজ্ঞান কীভাবে সমাধান হয় ইত্যাদি যে কোনও অংশের টুইট করে যদি আপনার রেকর্ডিং অবৈধ হয়ে যায়। এমনকি আপনি গেম ইভেন্টগুলি রেকর্ড করলেও, যদি এই ইভেন্টগুলি কীভাবে পরিবর্তিত হয় সেগুলির কোনও অংশ, আপনি আটকে আছেন।

আপনি যদি কেবল প্লেব্যাকগুলি চান তবে একটি ভাল পদ্ধতির মাধ্যমে প্লেয়ার সত্তার জন্য নির্দিষ্ট সময়কালীন তথ্যের সাথে সম্পর্কিত অবস্থান এবং আবর্তনের একটি নির্দিষ্ট তালিকা রেকর্ড করা। প্লেব্যাক চালানোর সময় যতটা পদার্থবিজ্ঞান এবং অন্যান্য গেমপ্লে লজিক অক্ষম করুন। এটি কতটা সহজ বা সম্ভাব্য তা নির্ভর করে আপনাকে আরও কতগুলি অবজেক্ট সিঙ্ক করতে হবে তার উপর নির্ভর করে।


প্রশ্নে আমি উল্লেখ করেছি যে গেম মডেল সম্পূর্ণরূপে নির্বিচারক। কোনও পদার্থবিজ্ঞান নেই এবং ফ্রেমের হারের প্রকরণটি কেবল ক্লায়েন্টের পক্ষেই দৃশ্যমান, গেম মডেলটিতে নয় যা পুরোপুরি "টিক" এর উপর নির্ভরশীল।
ক্লাইম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.