ক্লায়েন্টের পক্ষের পূর্বাভাস সহ কীভাবে চলন্ত বস্তুর ক্ষতিপূরণ দেওয়া যায়?


11

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

এখানে চিত্র বর্ণনা লিখুন

আমি ভালভ, গ্যাফেরন এবং গ্যাম্বিটা পড়েছি এবং ক্লায়েন্টের পূর্বাভাসের জন্য গ্যাম্বিতার অ্যালগরিদম প্রয়োগ করেছি :

এখানে চিত্র বর্ণনা লিখুন

ক্লায়েন্টের পূর্বাভাস প্লেয়ার শিপটিতে সার্ভার থেকে তার অবস্থানটি আপডেট হওয়ার সাথে সাথে আপডেট করে এবং তারপরে প্লেয়ার শিপটিতে অপ-প্রসেসড-না-সার্ভার ইনপুটটিকে আবার প্রয়োগ করে by

দুর্ভাগ্যক্রমে, এটি আমার গেমের পক্ষে ভাল কাজ করে না। আমি বিশ্বাস করি যে এটি গ্যাম্বিতার উদাহরণ ইতিমধ্যে চলমান বস্তুগুলিতে বা পদক্ষেপের ভিত্তিতে ধাপে আপডেট হওয়া আদেশগুলি বিবেচনা করে না with ("পদক্ষেপ" দ্বারা আমি ফ্রেম বোঝাই)। সুতরাং আমার গেমটিতে প্লেয়ারটি (ইতিমধ্যে চলমান) শিপটি ত্বরান্বিত করতে চাপ দেয় যা ক্লায়েন্টের উপর চলতে থাকে, সার্ভারে কমান্ড প্রেরণ করে এবং পরের ধাপে সাধারণত সার্ভার থেকে ওয়ার্ল্ড স্ন্যাপশট গ্রহণ করে receives আমি আরও কিছু পেতে:

এখানে চিত্র বর্ণনা লিখুন

প্লেয়ার কমান্ড ক্লায়েন্ট পদক্ষেপ 3 এ সঞ্চালিত হয় , তবে সার্ভারে এটি সার্ভারের একমাত্র রান 5 ধাপে চালায় । ক্লায়েন্টের ক্লায়েন্ট step ষ্ঠ সময়ে বিশ্ব স্ন্যাপশটটি গ্রহণ করার পরে , ভবিষ্যদ্বাণীটি বন্ধ হয়ে যায়, বিশেষত দ্রুত গতিতে।

সমস্যার সরলতাটি হ'ল ক্লায়েন্টটি 5 তম কমান্ডটি চালায় তবে সার্ভার 6 ধাপে এটি চালায় । আমি সম্ভবত কমান্ডটি সহ ক্লায়েন্ট পদক্ষেপ প্রেরণ সম্পর্কে ভেবেছিলাম, এবং সার্ভারটি আবার ফিরে আসবে এবং ক্লায়েন্টের সময় ধাপের সাথে কমান্ডটি পুনরায় চালাও। রোলব্যাকের পরে প্রাপ্ত কমান্ডগুলির কী ঘটে বা প্রতারিত ক্লায়েন্টরা কীভাবে প্রেরিত পদক্ষেপটি পরিবর্তন করে শোষণ করতে পারে - যেমন এর ফলে অন্যান্য সমস্যার কারণ হতে পারে।

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

আমার প্রশ্নগুলো:

  • আপনি কি ধ্রুব পদক্ষেপের আন্দোলনের সাথে গাম্বিতার অ্যালগরিদমকে কাজ করতে পারেন? বা এটি আমার গেমের সাথে ধারণাগতভাবে বেমানান?

  • ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে যাওয়ার পরে কি সঠিক পথে যাওয়া যায়? যদি তাই হয়, আপনি কীভাবে ইতিমধ্যে সার্ভার থেকে প্রাপ্ত যা মেলে ক্লায়েন্ট অবস্থান থেকে একটি ইতিমধ্যে চলন্ত বস্তু interplate করবেন?

  • এই পদ্ধতিগুলি, ধীরে ধীরে দ্বিখণ্ডিতকরণ এবং গাম্বিতার অ্যালগরিদম কীভাবে কাজ করতে পারে বা সেগুলি পারস্পরিক একচেটিয়া হতে পারে?


আমি একই কাজ করছি এবং ঠিক একই সমস্যা চালাচ্ছি। যত তাড়াতাড়ি আমি সার্ভারের স্থিতি প্রয়োগ এবং পুনরায় প্রয়োগের ইনপুটগুলি বেগ যোগ করার সাথে সাথে ইতিমধ্যে পরিচালিত বেগের পরিবর্তনগুলি থেকে মুক্তি পেয়েছে। আমি সর্বশেষ প্রাপ্ত বার্তাটি থেকে সমস্ত আপডেট পুনরায় প্রয়োগ করার চেষ্টা করছি তবে এটি এখনও খুব সহজ নয়। আপনি কি কখনও এর সমাধান খুঁজে পেয়েছেন?
মাকুরায়ামি

@ মাকুরায়ামি হ্যাঁ - আমি সমাধানটি বর্ণনা করে একটি নিবন্ধ লিখতে শুরু করেছি। শিগগিরই আপডেট হবে!
OpherV

আমি আমার প্রকল্পে আরও কাজ করেছি এবং একটি কার্যকর সমাধান এবং এই সমস্যা সম্পর্কে কথা বলার জন্য আরও কিছু ভাল উত্স পেয়েছি। আমি আরও আলোচনা করতে চাই, সমাধানগুলি তুলনা করতে চাই ইত্যাদি ইত্যাদি আমাকে জানতে দিন আমি কোথায় আপনাকে যোগাযোগ করতে পারি :)
মাকুরায়ামি

জিএমএলে আমার ব্যবহারকারীর নাম
@ মাকুরায়ামি

উত্তর:


5

আমি যখন এই প্রশ্নটি জিজ্ঞাসা করেছি তার 6 মাসের মধ্যে, আমি এই সঠিক সমস্যাটি মোকাবেলা করার জন্য একটি সম্পূর্ণ ওপেন সোর্স গেম সার্ভার বিকাশ শেষ করেছি (এবং আরও অনেক!): Http://lance.gg

এখানে চিত্র বর্ণনা লিখুন

জড়িত গবেষণা ও উন্নয়ন আমাকে এখন আমার নিজের প্রশ্নের উত্তর দেওয়ার অনুমতি দেয়:

  • আপনি কি ধ্রুব পদক্ষেপের আন্দোলনের সাথে গাম্বিতার অ্যালগরিদমকে কাজ করতে পারেন? বা এটি আমার গেমের সাথে ধারণাগতভাবে বেমানান?

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

  • ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে যাওয়ার পরে কি সঠিক পথে যাওয়া যায়? যদি তাই হয়, আপনি কীভাবে ইতিমধ্যে সার্ভার থেকে প্রাপ্ত যা মেলে ক্লায়েন্ট অবস্থান থেকে একটি ইতিমধ্যে চলন্ত বস্তু interplate করবেন?

    এটি অন্য কোনও বিষয়ের উপর স্পর্শ করে, যা হ'ল সার্ভার আপডেটগুলির ক্লায়েন্টের পুনর্মিলন। ধীরে ধীরে অন্তরঙ্গকরণ কাজ করে, তবে খুব দ্রুত গতিযুক্ত গেমগুলির জন্য যেমন প্রশ্নের মধ্যে রয়েছে তবে বাস্তবে এক্সট্রোপোলেশন বাস্তবায়ন করা ভাল is

  • এই পদ্ধতিগুলি, ধীরে ধীরে দ্বিখণ্ডিতকরণ এবং গাম্বিতার অ্যালগরিদম কীভাবে কাজ করতে পারে বা সেগুলি পারস্পরিক একচেটিয়া হতে পারে?

    তারা একসাথে কাজ করতে পারে তবে কেবলমাত্র যদি সত্তা চলাচল ক্লায়েন্ট পিওভের পক্ষ থেকে নির্ধারিত হয়। সুতরাং সত্তাটি পদার্থবিদ্যা বা স্যুয়েডো-ফিজিক্স যেমন সন্নিবেশ, টেনে আনুন ইত্যাদি দ্বারা প্রভাবিত হয় তবে এটি কাজ করবে না '


1

আপনার গেমটি সময়ের পদক্ষেপের বিবেচনায় ভাবতে খুব "রিয়েল-টাইম" বলে মনে হচ্ছে। গেমটিকে "টার্ন-ভিত্তিক" হিসাবে বিবেচনা করা যেতে পারলে আমি কেবল "টার্নস" এর শর্তে চিন্তা করব। অন্যথায়, কেবল পালা বা পদক্ষেপের ধারণাটি ত্যাগ করুন। সবকিছু তখন সহজ হয়ে যায় :)

নোট করুন যে আপনি স্থানীয়ভাবে আপনার প্লেয়ারের জন্য ভবিষ্যদ্বাণী করেছেন, এবং কেবলমাত্র অন্য সত্তার জন্য (যেমন সিরিজের তৃতীয় নিবন্ধে ব্যাখ্যা করেছেন) ইন্টারপোলেট করুন। ইতিমধ্যে চলমান পদার্থগুলির জন্য সার্ভার আপডেটগুলির সাথে মোকাবিলা করার উপায়টি হ'ল সার্ভার-সাইড মিলন, ২ য় নিবন্ধের নীচের অর্ধে (যার দিকে আপনি লিঙ্ক করেছেন) explained

আশাকরি এটা সাহায্য করবে :)


কেবল পরিষ্কার করার জন্য - "পদক্ষেপ" দ্বারা আমি "ফ্রেম" বলতে চাই যা সেকেন্ডে 60 বার চলে। রেন্ডারিং থেকে প্রকৃত গেমের অগ্রগতিকে আলাদা করতে আমি এটিকে পদক্ষেপ (এবং ফ্রেম নয়) বলি এবং আদর্শভাবে তারা উভয়ই প্রতি সেকেন্ডে 60 এ সিঙ্ক হয়। আমি ইতিমধ্যে আপনার সার্ভার-সাইড মিলনের সংস্করণ কার্যকর করেছি যা উজ্জ্বলতার সাথে কাজ করে। এই প্রশ্নটি কেবল প্লেয়ার শিপকে বোঝায় - যা প্লেয়ার কমান্ড নির্বিশেষে (জড়তার কারণে) ক্রমাগত চলমান। আমার অসুবিধা এখানেই। কোন চিন্তা আছে? :)
OpherV

ফ্রেমগুলি ধাপগুলির চেয়ে পৃথক। পদক্ষেপগুলি একটি ধ্রুবক, অনুমানযোগ্য ক্রমে সরানো হয়। ফ্রেমগুলি সময়ের একটি পরিবর্তনশীল পরিমাণ সরিয়ে দেয়, সুতরাং যে কোনও অগ্রগতি সেই ফ্রেমের জন্য ব-দ্বীপের সময় দ্বারা গুণিত করতে হবে।
টিলার

@ টিলার প্রকৃতপক্ষে, এই কারণেই আমি "পদক্ষেপ" শব্দটি ব্যবহার করতে শুরু করেছি - আমি কেবল এটিকে আরও স্পষ্ট করে বলতে চেয়েছিলাম যে "পদক্ষেপ" এর ব্যবহারটি কেবল ভিত্তিক গেমসের মধ্যে সীমাবদ্ধ নয় এবং আমার গেমটিতে একটি পদক্ষেপ ঠিক 1 নেয় রেন্ডারিং নির্বিশেষে একটি সেকেন্ডের 60 /।
OpherV

নিজস্ব পরীক্ষার জন্য আমি কেবল কিছু নোট করেছি: 1 / 60s। অস্বাভাবিকভাবে দ্রুত এবং আমি বাজি ধরব যে 1x1 এর বেশি অংশগ্রহণের সাথে সর্বাধিক অনলাইন গেমগুলি 1 / 10s এ কাজ করে। আপডেট বা তার আশেপাশে।
প্যাট্রিক হিউজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.