আমি এমএমওতে প্লেয়ারদের রিয়েল-টাইম অবস্থানগুলি কীভাবে ট্র্যাক করব?


14

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

উত্তর:


23

প্লেয়ার পজিশনের অবস্থান রাখতে ফাইলগুলি কীভাবে ব্যবহার করা যেতে পারে?

আপনি ফাইলটিতে প্লেয়ারের অবস্থান লিখুন। উদাহরণস্বরূপ, আপনি যদি প্রতিটি খেলোয়াড়কে একটি অনন্য নম্বর (বা একটি জিইউইডি) দিয়ে সনাক্ত করেন তবে আপনি ফাইলের নাম হিসাবে এটি ব্যবহার করতে পারেন। ফাইলে কেবল অবস্থানের ডেটা এমন বিন্যাসে লিখুন যা আপনি পরে বিশ্লেষণ করতে পারেন। উদাহরণস্বরূপ, প্লেয়ার # 467239 যদি ( x, y, z ) অবস্থানে 467239.txtথাকে 20, 3, 19তবে তা থাকতে পারে ।

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

সম্ভবত আপনি রানটাইমে প্লেয়ারের অবস্থান সংরক্ষণ করার জন্য ডিবি বা ফাইলসিসম ব্যবহার করার চেষ্টা করছেন ? আপনার একেবারেই করা উচিত নয়

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

তবে প্রতিটি আপডেটের স্টোরেজে প্রতিটি খেলোয়াড়ের অবস্থান লেখা অপ্রয়োজনীয় এবং অত্যন্ত অদক্ষ; "বৃহত্তর" প্লেয়ার স্কেলগুলির অনুরূপ যে কোনও কিছুই হ্যান্ডেল করার পক্ষে এটি কখনই দ্রুত হবে না।


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

12
ক্লায়েন্টকে আপডেট করা পদ্ধতিটি সমস্ত ক্ষেত্রে একই রকম: সার্ভার ক্লায়েন্টকে তার নেটওয়ার্ক অবস্থানের মাধ্যমে কী বলে তা জানিয়ে দেয় (বা আরও বাস্তবভাবে, ক্লায়েন্ট, যা স্থানীয় ভবিষ্যদ্বাণী করছে, তার স্থানীয় অবস্থানও রয়েছে যা সার্ভারটি ক্লায়েন্টের জন্য বৈধতা দেয় এবং নিশ্চিত করে)। সার্ভার অ্যাক্সেস করছে এমন ডাটাবেস অ্যাক্সেস করার জন্য আপনার ক্লায়েন্টকে থাকা উচিত নয়।

1
"একটি ফাইল দিয়ে এটি করুন" বলার বিষয়টি আমি মিস করছি, কেবল এটি ব্যাখ্যা করার জন্য এটি আসলে ডিবি ব্যবহার করার চেয়ে খারাপ এবং তারপরে ব্যাখ্যা করে আসল সমস্যাটি আসলে। আপনার কেন প্রথমে সেই অকেজো ফাইলের ব্যাখ্যা দরকার? এটি কেবল নৈমিত্তিক পাঠককে বিভ্রান্ত করে, কারও পক্ষে কোনও লাভ হয় না।
o0 '

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

13

অবস্থান আবশ্যক র্যাম হতে ব্যবহারে হয়েছে। (উদা: প্লেয়ারের চরিত্র বিশ্বে রয়েছে) আপনি ডিবি অপারেটিং মেমরি হিসাবে ব্যবহার করতে পারবেন না। ভাল আপনি করতে পারেন, কিন্তু এটি ভয়ানক হবে।

আপনার নিয়মিত পজিশনগুলি সংরক্ষণ করা উচিত তবে প্রতিবার পরিবর্তিত হয় না।

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

অতিরিক্ত সময় উপলভ্য থাকাকালীন 30 টি অবস্থান সাশ্রয় করুন।

ক্লায়েন্টদের হিসাবে। আপনার সার্ভার সফ্টওয়্যারটির সাথে সংযোগের মাধ্যমে তাদের (প্রাসঙ্গিক) গেম স্টেট আপডেটগুলি পাওয়া উচিত। ডিবি থেকে নয় ... এটি অযৌক্তিক, ধীর, খারাপ, মন্দ এবং শক্তি বিঘ্নিত হবে।


2
এবং হ্যাঁ পরিস্থিতি এড়ানোর জন্য একটি পৃথক থ্রেড ব্যবহার করুন যেখানে ডেটাবেস আপনার বাকি গেম লুপটিকে অবরুদ্ধ করতে পারে।
কোয়েট

4

প্রতি 500 বা তাই গেমের টিক্সগুলিতে ফাইলগুলিতে সংরক্ষণ করার জন্য আমার একটি আলাদা থ্রেড রয়েছে। অন্যথায়, আপনার সমস্ত কিছু র‍্যামে রাখা উচিত।


4

আমি আমার সার্ভারে যা করি তা হ'ল খেলোয়াড়দের দিকনির্দেশ (ভেক্টর) এবং শেষ অবস্থান সংরক্ষণ করা, যদি প্লেয়ারটির গতি থাকে তবে আমি প্রতি 2 সেকেন্ডে খেলোয়াড়দের নতুন অবস্থান গণনা করি।

ক্লায়েন্টটির অবশ্যই নিজস্ব অবস্থানের অবস্থান রয়েছে এবং এটি সার্ভারে নতুন দিক (ভেক্টর) প্রেরণ করে।

সার্ভারটি অবস্থান সম্পর্কে অনুমোদনযোগ্য এবং ক্লায়েন্টটি শেষ চেকের পরে নির্দিষ্ট দূরত্বে সরিয়ে ফেললে একটি অবস্থান প্যাকেট প্রেরণ করে (এটি ক্লায়েন্টের সিঙ্কের বাইরে থাকলে রাবার ব্যান্ডের প্রভাব হতে পারে)।

এই সব অবশ্যই স্মৃতিতে ঘটে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.