নন-শুটারের জন্য আন্দোলনের পূর্বাভাস


35

আমি মাঝারি মানের স্কেল মাল্টিপ্লেয়ারের সাথে একটি আইসোমেট্রিক 2 ডি গেম নিয়ে কাজ করছি, প্রায় 20-30 খেলোয়াড় একটানা একটানা সার্ভারে সংযুক্ত। আমার জায়গায় স্থিতিশীলতার পূর্বে ভবিষ্যদ্বাণী বাস্তবায়ন করতে কিছুটা সমস্যা হয়েছিল।

পদার্থবিজ্ঞান / মুভমেন্ট

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

মূল গেমের লুপে, "অঙ্কন" এর আগে "আপডেট" বলা হয়। আপডেট যুক্তি একটি "পদার্থবিজ্ঞান আপডেট টাস্ক" ট্রিগার করে যা অ-শূন্য গতির সাথে সমস্ত সত্ত্বাকে ট্র্যাক করে সত্তাগুলির অবস্থান পরিবর্তন করার জন্য খুব বেসিক ইন্টিগ্রেশন ব্যবহার করে। উদাহরণস্বরূপ: সত্তা.পজিশন + = সত্তা.বেলোসিটি.স্কেল (এলপসডটাইম.সেকেন্ডস) (যেখানে "সেকেন্ডস" একটি ভাসমান পয়েন্ট মান, তবে একই পদ্ধতিটি মিলিসেকেন্ড পূর্ণসংখ্যার মানগুলির জন্য কাজ করবে)।

মূল বক্তব্যটি হ'ল কোনও চলাচলের জন্য কোনও অন্তরোলজ ব্যবহার করা হয় না - প্রাথমিক পদার্থবিজ্ঞানের ইঞ্জিনটির "পূর্ববর্তী অবস্থা" বা "বর্তমান অবস্থা" সম্পর্কে কোনও ধারণা নেই, কেবল একটি অবস্থান এবং গতিবেগ।

রাষ্ট্র পরিবর্তন এবং আপডেট প্যাকেট

খেলোয়াড়ের চরিত্রের সত্তার বেগ যখন পরিবর্তনগুলি নিয়ন্ত্রণ করে, সত্তার ক্রিয়া প্রকার (স্ট্যান্ড, ওয়াক, রান), দিক (উত্তর-পূর্ব) এবং বর্তমান অবস্থান সম্বলিত একটি সার্ভারে একটি "মুভ অবতার" প্যাকেট প্রেরণ করা হয়। 3 ডি প্রথম ব্যক্তি গেমগুলি কীভাবে কাজ করে তার থেকে এটি আলাদা from 3 ডি গেমের খেলায় বেগ (দিকনির্দেশ) ফ্রেম ফ্রেমে ফ্রেম পরিবর্তন করতে পারে প্লেয়ারের চারপাশে ঘোরাঘুরি। প্রতিটি রাষ্ট্র পরিবর্তন প্রেরণ কার্যকরভাবে ফ্রেম প্রতি একটি প্যাকেট প্রেরণ করবে, যা খুব ব্যয়বহুল হবে। পরিবর্তে, 3 ডি গেমগুলি রাষ্ট্রের পরিবর্তনগুলি উপেক্ষা করে একটি নির্দিষ্ট ব্যবধানে "স্টেট আপডেট" প্যাকেটগুলি প্রেরণ করবে বলে - প্রতি 80-150 মিমি বলে।

যেহেতু আমার গেমটিতে গতি এবং দিকনির্দেশের আপডেটগুলি খুব কম ঘন ঘন ঘটে তাই আমি প্রতিটি রাজ্যের পরিবর্তন প্রেরণে দূরে যেতে পারি। যদিও পদার্থবিজ্ঞানের সমস্ত সিমুলেশন একই গতিতে ঘটে এবং নির্বিচারক, তবুও বিলম্বিতা এখনও একটি বিষয়। যে কারণে আমি রুটিন পজিশন আপডেট প্যাকেটগুলি (একটি 3D গেমের অনুরূপ) প্রেরণ করি তবে খুব কম ঘন ঘন - এই মুহুর্তে প্রতি 250 মিমি অবধি, তবে আমি ভাল ভবিষ্যদ্বাণী নিয়ে সন্দেহ করি যে আমি সহজেই এটি 500ms এর দিকে বাড়িয়ে তুলতে পারি। সবচেয়ে বড় সমস্যা হ'ল আমি এখন নিয়ম থেকে বিচ্যুত হয়েছি - অন্য সমস্ত ডকুমেন্টেশন, গাইড এবং নমুনা অনলাইনে রুটিন আপডেট পাঠায় এবং দুটি রাজ্যের মধ্যে বিভক্ত হয়। এটি আমার আর্কিটেকচারের সাথে বেমানান বলে মনে হচ্ছে এবং আমার একটি আরও ভাল আন্দোলনের পূর্বাভাস অ্যালগরিদম নিয়ে আসা দরকার যা একটি (খুব প্রাথমিক) "নেটওয়ার্কযুক্ত পদার্থবিজ্ঞান" আর্কিটেকচারের কাছাকাছি।

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

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

পূর্বাভাস এবং লগ ক্ষতিপূরণ

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

সমস্যা

আমি বিভিন্ন অ্যালগরিদমের সাথে লড়াই করে চলেছি, এবং অনেকগুলি প্রশ্ন এবং সমস্যা রয়েছে:

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

  2. যখন কোনও প্যাকেট আসবে, আমি প্যাকেটের গতিবেগের সাথে একটি নির্দিষ্ট সময়কাল ধরে প্যাকেটের অবস্থানকে একত্রিত করার চেষ্টা করেছি (বলুন, 200 মিমি)। আমি তখন একটি নতুন ভেক্টর গণনা করার জন্য আন্তঃবিবাহিত অবস্থান এবং বর্তমান "ত্রুটি" অবস্থানের মধ্যে পার্থক্য নিই এবং প্রেরণীয় গতির পরিবর্তে সত্তার উপরে রাখি। তবে, ধারণাটি হ'ল সেই সময়ের ব্যবধানে অন্য একটি প্যাকেট আসবে এবং পরবর্তী প্যাকেটটি কখন আসবে "অনুমান করা" এটি অবিশ্বাস্যরকম কঠিন - বিশেষত যেহেতু তারা সবাই স্থির বিরতিতে আসে না (যেমন / রাষ্ট্রের পরিবর্তনগুলিও)। ধারণাটি মূলত ত্রুটিযুক্ত, বা এটি সঠিক তবে কিছু সংশোধন / সমন্বয় প্রয়োজন?

  3. রিমোট প্লেয়ার থামলে কী ঘটে? আমি অবিলম্বে সত্তাকে থামাতে পারি, তবে এটি আবার না সরানো পর্যন্ত এটি "ভুল" স্পটে অবস্থান করবে। যদি আমি কোনও ভেক্টর অনুমান করি বা ইন্টারপোল্ট করার চেষ্টা করি তবে আমার একটি সমস্যা আছে কারণ আমি পূর্বের রাজ্যটি সংরক্ষণ করি না - পদার্থ বিজ্ঞানের ইঞ্জিনটির "আপনি এক্স অবস্থানে পৌঁছানোর পরে থামতে হবে" বলার উপায় নেই। এটি কেবল একটি বেগ বোঝে, এর চেয়ে জটিল কিছুই নয়। সত্তা বা পদার্থবিজ্ঞানের ইঞ্জিনে আমি "প্যাকেট মুভমেন্ট স্টেট" তথ্য যুক্ত করতে নারাজ, কারণ এটি বেসিক ডিজাইনের নীতিগুলি লঙ্ঘন করে এবং বাকি গেম ইঞ্জিনের পুরো অংশে নেটওয়ার্ক কোডকে রক্তাক্ত করে।

  4. সত্তাগুলির সংঘর্ষ হলে কী হবে? তিনটি পরিস্থিতি রয়েছে - কন্ট্রোলিং প্লেয়ার স্থানীয়ভাবে সংঘর্ষ হয়, একটি অবস্থান আপডেটের সময় দুটি সত্ত্বার সার্ভারে সংঘর্ষ হয়, বা স্থানীয় ক্লায়েন্টের সাথে একটি দূরবর্তী সত্তা আপডেটের সংঘর্ষ ঘটে। সমস্ত ক্ষেত্রে আমি কীভাবে সংঘর্ষটি পরিচালনা করব তা অনিশ্চিত - প্রতারণা বাদ দিয়ে উভয় রাষ্ট্রই "সঠিক" তবে বিভিন্ন সময়সীমার মধ্যে। কোনও প্রত্যন্ত সত্তার ক্ষেত্রে এটি কোনও প্রাচীরের মধ্য দিয়ে হাঁটতে আঁকতে বুদ্ধিমান হয় না, তাই আমি স্থানীয় ক্লায়েন্টের সাথে সংঘর্ষ সনাক্তকরণ সম্পাদন করি এবং এটি "থামাতে" পারি। উপরের পয়েন্ট # 2 এর উপর ভিত্তি করে, আমি একটি "সংশোধনকারী ভেক্টর" গণনা করতে পারি যা ধারাবাহিকভাবে "প্রাচীরের মধ্য দিয়ে" সত্তাকে সরানোর চেষ্টা করে যা কখনই সফল হতে পারে না - ত্রুটি খুব বেশি না হওয়া পর্যন্ত দূরবর্তী অবতার সেখানে আটকে থাকে এবং এটি "স্ন্যাপস" হয়ে যায় অবস্থান। গেমগুলি কীভাবে এটিকে ঘিরে কাজ করে?


1
কোন ধরণের 3 ডি বা 2 ডি হচ্ছে আপনি কোন ধরনের সার্ভার ব্যবহার করছেন তার সাথে কী সম্পর্ক রয়েছে? এবং কেন কোনও ক্রীড়াবিদ সার্ভার আপনার গেমের জন্য কাজ করবে না?
অ্যাটাকিংহোব

1
@ রয় টি। ব্যান্ডউইথ ট্রেড অফস ব্যান্ডউইথ হ'ল আজকের কম্পিউটার সিস্টেমে সর্বাধিক মূল্যবান সংস্থান।
FxIII

1
এটি কেবল অসত্য, অনলাইন গেমগুলি বেশিরভাগ ক্ষেত্রে প্রতিক্রিয়া সময় দ্বারা প্রাধান্য পায়, উদাহরণস্বরূপ একটি 10 ​​এমবিট লাইনে (1.25MB / গুলি) সার্ভার-ক্লায়েন্টের মধ্যে বিলম্বটি 20 মিমি, একটি 1.25 কেবি প্যাকেট প্রেরণে 20 মিমি + 1 এমএস লাগবে। 12.5 কেবি প্যাকেট পাঠাতে 30 মিনিট সময় লাগবে। দ্বিগুণ দ্রুত লাইনে, একটি 1.25kb প্যাকেটটি এখনও 12 কেবি প্যাকেটের জন্য 20ms + 0.5ms, এবং 20ms + 5ms গ্রহণ করবে। লেটেন্সি হ'ল সীমাবদ্ধ ফ্যাক্টর, ব্যান্ডউইথ নয় । যাইহোক, আমি কতটা ডেটা আছে তা জানি না, তবে 50 ভেক্টর 3 (25x পজিশন + 25x রোটেশন) পাঠানো মাত্র 600 বাইট, প্রতি 20 এমএসে পাঠাতে 30 কেবি / সেকেন্ড খরচ পড়বে। (+ প্যাকেট ওভারহেড)
রায় টি।

2
ভূমিকম্প ইঞ্জিনের প্রথম সংস্করণ থেকেই ভবিষ্যদ্বাণী রয়েছে। ভূমিকম্পের পূর্বাভাস বর্ণিত হয়েছে সেখানে এবং অন্যান্য কয়েকটি জায়গায়। এটা দেখ.
ব্যবহারকারী 712092

1
আপনি কি এই অবস্থানটি সমান্তরালভাবে প্রতিটি সত্তার জন্য + = বেগ * ডেল্টেটিম করেন (অত্যাবশ্যকভাবে: কোডে আপনার সত্ত্বার দুটি শারীরিক পরামিতি রয়েছে, একটি ফ্রেম আলাদা রয়েছে, আপনি পুরনোটিকে আরও নতুন হতে আপডেট করুন এবং সেগুলি অদলবদল করুন)? কিছু হয় শন মধ্যে Barret, যিনি চোর 1 ইঞ্জিন বেস তৈরি দ্বারা iterating সঙ্গে সমস্যা
ব্যবহারকারী 712092

উত্তর:


3

কেবলমাত্র 2D, আইসোমেট্রিক, 3 ডি বলতে গেলে এই সমস্যাটি আসে যখন তারা সব একই হয়। কারণ আপনি 3 ডি এর অনেকগুলি উদাহরণ দেখেন এবং আপনি কেবল তাত্ক্ষণিক বেগ সহ 2 ডি অক্ট্যান্ট-সীমাবদ্ধ ইনপুট সিস্টেম ব্যবহার করছেন তার অর্থ এই নয় যে আপনি গত 20+ বছর ধরে বিবর্তিত নেটওয়ার্কিং নীতিগুলি ফেলে দিতে পারেন।

গেম খেলার সমঝোতার সময় ডিজাইনের নীতিগুলি তিরস্কার করা হবে!

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

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

অবশেষে, যদিও আপনার ইনপুটগুলি 8 টি দিকের মধ্যে সীমাবদ্ধ তবে প্রকৃত পরিবর্তন যে কোনও সময় ঘটতে পারে - 250 মিমি চক্র প্রয়োগ করা কেবল দ্রুত খেলোয়াড়দের হতাশ করবে। 30 টি প্লেয়ার কোনও সার্ভার হ্যান্ডল করার জন্য বড় কিছু নয়। আপনি যদি কয়েক হাজারের কথা বলছেন ... তবুও তাদের গ্রুপগুলি একাধিক বক্সনে বিভক্ত যাতে পৃথক সার্ভারগুলি কেবল যুক্তিসঙ্গত বোঝা বহন করে।

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


এখানেই Defষি-পরামর্শ! বড় ছবিটি সহজেই looseিলে যায়। আমি এই ক্ষেত্রে টিসিপি ব্যবহার করছি। "8-দিকনির্দেশ" ইস্যু ইনপুটগুলির ক্ষেত্রে যতটা সমস্যা তা-ই নয় - এটি প্রসারণ এবং এক্সট্রাপোলেশন নিয়ে সমস্যা বেশি। গ্রাফিকগুলি সেই কোণগুলিতে সীমাবদ্ধ এবং অ্যানিমেটেড স্প্রিট ব্যবহার করুন - খেলোয়াড় যদি আদর্শের থেকে খুব দূরে কোনও ভিন্ন কোণ বা বেগের দিকে চলে তবে গেমপ্লেটি "অদ্ভুত দেখাচ্ছে"।
শ্যাডোচ্যাজার

1

সুতরাং আপনার সার্ভারটি মূলত একটি "রেফারি"? এই ক্ষেত্রে, আমি বিশ্বাস করি যে আপনার ক্লায়েন্টের সমস্ত কিছুই নির্বিচারে করা উচিত; আপনাকে নিশ্চিত করতে হবে যে প্রতিটি ক্লায়েন্টের সমস্ত কিছু সর্বদা একই ফল দেয়।

আপনার প্রথম প্রশ্নের জন্য, একবার স্থানীয় খেলোয়াড় সময়ের সাথে সাথে তার চলাচলকে আরও বিচ্ছিন্ন করতে এবং সংঘর্ষগুলি প্রয়োগ করতে সক্ষম হওয়া ছাড়াও অন্য খেলোয়াড়দের দিকনির্দেশনা গ্রহণ করে, আমি দেখছি না যে আপনি কীভাবে ভবিষ্যদ্বাণী করতে পারবেন যে খেলোয়াড় পরবর্তী দিকে ঘুরবে, বিশেষত 8 দিকের পরিবেশ।

আপনি যখন প্রতিটি প্লেয়ারের "বাস্তব অবস্থান" আপডেটটি পান (সম্ভবত আপনি সার্ভারে স্তম্ভিত হয়ে যাওয়ার চেষ্টা করতে পারেন) হ্যাঁ আপনাকে প্লেয়ারের অবস্থান এবং দিকটি বিভক্ত করতে হবে। যদি "অনুমান করা" অবস্থানটি খুব ভুল হয় (যেমন শেষ দিকের প্যাকেট প্রেরণের ঠিক পরে প্লেয়ারটি পুরোপুরি দিক পরিবর্তন করেছিল) আপনার বিশাল ব্যবধান থাকবে। এর অর্থ হ'ল প্লেয়ারটি পজিশনে ঝাঁপ দেয়, অথবা আপনি পরবর্তী অনুমান করা অবস্থানে বিভক্ত করতে পারেন । এটি সময়ের সাথে সাথে স্বাচ্ছন্দ্য প্রবণতা সরবরাহ করবে।

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

জিনিসগুলির সার্ভারের পক্ষে, একটি রেফারি সার্ভার এখনও সাধারণ অ্যান্টি-চিট প্রক্রিয়া হিসাবে স্বল্প সময়ের জন্য কোনও খেলোয়াড়ের গতি পরীক্ষা করার জন্য সাধারণ গণনা করতে পারে । যদি আপনি প্রতিটি খেলোয়াড়কে একবারে 1 সেকেন্ডের বেশি পর্যবেক্ষণের মাধ্যমে লুপ করেন তবে আপনার প্রতারণা সনাক্তকরণটি মাপেরযোগ্য হবে, কেবলমাত্র প্রতারককে খুঁজে পেতে এটি বেশি সময় নেয়।


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

কীভাবে এটি দ্রোহ বা পূর্বাভাসের সাথে একত্রিত করা যায় তা আমি নিশ্চিত নই। আমি প্যাকেটে প্রেরিত আপডেট হওয়া অবস্থানটি গ্রহণের চেষ্টা করেছি, এটি একটি নির্দিষ্ট সময়ের মধ্যে একীভূত করে (বলুন, 200 মিমি) এবং তারপরে 200 মিমিতে পৌঁছানোর জন্য ভেক্টর (বেগ) নির্ধারণ করতে হবে। অন্য কথায়, ক্লায়েন্ট পক্ষের প্লেয়ারের বর্তমান ভুল অবস্থান নির্বিশেষে, তাদের এখনও 200 মিলিমিটারে একই "আনুমানিক সঠিক অবস্থান" পৌঁছানো উচিত। এটি আমার চরিত্রটিকে ক্রেজিট দিকের দিকে পাঠিয়ে দিয়েছিল - আমি ধরে নিয়েছি কারণ 200 মিমি পরবর্তী প্যাকেটের সময় হওয়া উচিত, যা আমি অনুমান করতে পারি না।
শ্যাডোচ্যাজার

আপনি অনুমান করা সঠিক অবস্থানে টি + 1 এ সঠিক অবস্থানটি সংহত করার আগে প্রথমে টি থেকে টি + 1 এ সঠিক অবস্থানটি সংহত করার বিষয়ে নিশ্চিত হয়েছিলেন ?
জোনাথন কনেল

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

1
হ্যাঁ একটি নির্দিষ্ট ধরণের টাইমস্টেপ সহ সম্ভবত কোনও ভাল ধারণা নয়। আমি উদ্বিগ্ন যদিও 8-দিকের চলাচলের অনিয়মিততা ভবিষ্যদ্বাণী করা খুব কঠিন হবে (যদি অসম্ভব না?) তবুও, আপনি টি + 1 এর পূর্বাভাস দেওয়ার জন্য ক্লায়েন্টের গড় বিলম্বিতাটি ব্যবহার করার চেষ্টা করতে পারেন এবং উপরে একটি প্রান্তিকতা রয়েছে যা আপনি সর্বদা অন্যান্য খেলোয়াড়দের তাদের নতুন অবস্থানে "টেলিপোর্ট" করেন।
জোনাথন কনেল

0

আপনি কি নিজের রাজ্যের পরিবর্তন বার্তাগুলিতে বেগ অন্তর্ভুক্ত করতে পারবেন না এবং আন্দোলনের পূর্বাভাস দেওয়ার জন্য এটি ব্যবহার করতে পারেন? যেমন ধরুন গতিবেগ পরিবর্তন হয় না আপনি মেসেজ না পাওয়া পর্যন্ত এটি পরিবর্তন হয়েছে? আমি মনে করি আপনি ইতিমধ্যে অবস্থানগুলি প্রেরণ করছেন, সুতরাং কোনও কারণ যদি "ওভারশুট" হয় তবে আপনার পরবর্তী আপডেট থেকে যাইহোক সঠিক অবস্থান রয়েছে। তারপরে আপনি আপডেটের সময় অবস্থানগুলি পদক্ষেপ নিতে পারেন যেমন আপনি ইতিমধ্যে শেষ বার্তাটি থেকে বেগটি ব্যবহার করছেন এবং যখনই কোনও নতুন অবস্থানের সাথে কোনও বার্তা আসে তখন অবস্থানটি ওভাররাইট করে। এর অর্থ হ'ল যদি অবস্থানটি পরিবর্তন না হয় তবে বেগ আপনার কী বার্তা প্রেরণ করা দরকার (এটি যদি আপনার গেমের মধ্যে একটি বৈধ ক্ষেত্রেও হয়) তবে এটি আপনার ব্যান্ডউইথের ব্যবহারকে খুব বেশি প্রভাব ফেলবে না if

এখানে বিভক্তির বিষয়টি বিবেচনা করা উচিত নয়, উদাহরণস্বরূপ, যখন আপনি জানেন যে ভবিষ্যতে কিছু হবে কোথায়, আপনার এটি রয়েছে কিনা, আপনি কোন পদ্ধতিটি ব্যবহার করছেন you আপনি কি অতিরিক্ত এক্সপোলেশন নিয়ে বিভ্রান্ত হয়ে পড়েছেন? (যার জন্য আমি যা বর্ণনা করি তা হ'ল এক, সরল, পদ্ধতির)


-1

আমার প্রথম প্রশ্নগুলি হবে: সার্ভারের কর্তৃত্ব রয়েছে এমন একটি মডেল ব্যবহার করে কী ভুল? পরিবেশটি 2 ডি বা 3 ডি কিনা তা কেন গুরুত্বপূর্ণ? যদি আপনার সার্ভারটি অনুমোদনপ্রাপ্ত হয় তবে এটি আপনার প্রতারণামূলক সুরক্ষাটিকে আরও অনেক সহজ করে তুলবে।

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

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

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

আপনার কেন বিরক্ত হওয়া দরকার? অনুমোদিত সার্ভারটি যে কোনও ভ্রান্ত আন্দোলনকে ওভাররাইড করে।

সত্তাগুলির সংঘর্ষ হলে কী হবে? যদি বর্তমান প্লেয়ারটি কোনও কিছুর সাথে সংঘর্ষিত হয় তবে উত্তরটি সহজ - কেবল প্লেয়ারটিকে নড়াচড়া করা থেকে বিরত করুন। তবে যদি দুটি সত্তা সার্ভারে একই স্থান গ্রহণ করে তবে কী ঘটে? স্থানীয় পূর্বাভাসের কারণে প্লেয়ার বা অন্য সত্তার সাথে কোনও দূরবর্তী সত্তার সংঘর্ষ ঘটতে পারে - তবে আমি কি তাদেরও থামিয়ে দেব? যদি ভবিষ্যদ্বাণীটি কোনও প্রাচীরের সামনে তাদের লেগে থাকার দুর্ভাগ্য হয় যা প্লেয়ারটি ঘুরতে থাকে তবে ভবিষ্যদ্বাণীটি কখনই ক্ষতিপূরণ দিতে সক্ষম হবে না এবং ত্রুটিটি উচ্চতায় এলে সত্তাটি নতুন অবস্থানে চলে যাবে।

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

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


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

আমি গ্লেনের সমস্ত নিবন্ধ পড়েছি, তবে তিনি মন্তব্যগুলিতে বলেছেন যে তারা কেবল শ্যুটারদের (অর্থাৎ / উচ্চ আপডেটের ফ্রিকোয়েন্সি) দিকে প্রস্তুত। তাঁর কয়েকটি নিবন্ধ প্রামাণিক ক্লায়েন্ট সম্পর্কে কথা বলছে, এটিই আমি বাস্তবায়নের জন্য চেষ্টা করছি। আমি সার্ভারে কোনও ইন্টারপোলেশন / পদার্থবিজ্ঞান করতে চাই না, তবে আমি যদি সত্যই একমাত্র উপায় হয়ে থাকি তবে আমি আমার মন পরিবর্তন করতে রাজি আছি :)
ShadowChaser

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

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