আমি একটি 2 ডি টপ-ডাউন-শ্যুটারে কাজ করছি এবং কোয়েক 3 এর মতো নেটওয়ার্ক গেমগুলিতে ব্যবহৃত ধারণাগুলি অনুলিপি করার জন্য যথাসাধ্য চেষ্টা করছি।
- আমার একটি অনুমোদিত সার্ভার রয়েছে।
- সার্ভার ক্লায়েন্টদের স্ন্যাপশট প্রেরণ করে।
- স্ন্যাপশটগুলিতে একটি টাইমস্ট্যাম্প এবং সত্তার অবস্থান থাকে।
- স্ন্যাপশট পজিশনের মধ্যে সত্তাগুলি একত্রিত হয় যাতে চলাচল মসৃণ দেখায়।
- প্রয়োজনীয়তার দ্বারা, সত্তা বিরতি সামান্য "অতীতে" ঘটে যায় যাতে আমাদের একাধিক স্ন্যাপশট থাকে যার মধ্যে বিভক্ত হয়।
আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল "ক্লক সিঙ্ক্রোনাইজেশন"।
- সরলতার স্বার্থে, আসুন আমরা কেবলমাত্র একটি মুহুর্তের জন্য ভান করি যে সার্ভারে এবং প্যাকেটগুলি প্যাকেটগুলি স্থানান্তর করার সময় শূন্য লেটেন্সি রয়েছে।
- যদি সার্ভার ঘড়িটি ক্লায়েন্টের ঘড়ির 60 সেকেন্ড এগিয়ে থাকে তবে ক্লায়েন্টের স্থানীয় টাইমস্ট্যাম্পের চেয়ে একটি স্ন্যাপশট টাইমস্ট্যাম্প 60000 মিমি এগিয়ে।
- অতএব, ক্লায়েন্ট কোনও প্রদত্ত সত্তা তার চালনাগুলি দেখার আগে সত্তা স্ন্যাপশটগুলি প্রায় 60 সেকেন্ডের জন্য সংগ্রহ করে বসবে, কারণ ক্লায়েন্টের ঘড়িটি ধরতে দীর্ঘ সময় লাগে।
আমি প্রতিবার একটি স্ন্যাপশট প্রাপ্ত হওয়ার সাথে সাথে সার্ভার এবং ক্লায়েন্ট ঘড়ির মধ্যে পার্থক্য গণনা করে এটি কাটিয়ে উঠতে সক্ষম হয়েছি।
// For simplicity, don't worry about latency for now...
client_server_clock_delta = snapshot.server_timestamp - client_timestamp;
সত্তাটি কতটা দ্বিখণ্ডনের মধ্যে কতটা বরাবর রয়েছে তা নির্ধারণ করার সময়, আমি কেবল ক্লায়েন্টের বর্তমান সময়ের মধ্যে পার্থক্যটি যুক্ত করি। তবে এর সাথে সমস্যাটি হ'ল এটি হতাশার কারণ হবে কারণ অন্যগুলির চেয়ে তড়িঘড়ি / ধীরে ধীরে আগত স্ন্যাপশটের কারণে দুটি ঘড়ির মধ্যে পার্থক্য হঠাৎ করে ওঠানামা করবে।
আমি কীভাবে ঘড়িগুলি ঘনিষ্ঠভাবে সংহত করতে পারি যে একমাত্র অনুধাবনযোগ্য বিলম্ব হ'ল যা অন্তরঙ্গকরণের জন্য হার্ড-কোডড এবং সাধারণ নেটওয়ার্কের বিলম্বিত কারণে ঘটে?
অন্য কথায়, ঘড়িরগুলি হতাশার পরিচয় না দিয়ে খুব বেশি দেরি বা খুব শীঘ্রই শুরু হওয়া থেকে আমি কীভাবে প্রবৃত্তিকে আটকাতে পারি?
সম্পাদনা: উইকিপিডিয়া অনুসারে , এনটিপিকে কয়েক মিলি সেকেন্ডের মধ্যে ইন্টারনেটের মাধ্যমে ঘড়িগুলি সিঙ্ক্রোনাইজ করতে ব্যবহার করা যেতে পারে। তবে, প্রোটোকলটি জটিল বলে মনে হচ্ছে এবং সম্ভবত গেমগুলিতে ব্যবহারের জন্য ওভারকিল রয়েছে?