নেটওয়ার্কিং পং ক্লোন


10

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

আমার 4 জন প্লেয়ার সহ একটি পং ক্লোন রয়েছে এবং তিনটি ক্লায়েন্ট এবং সার্ভারের মধ্যে প্যাডল অবস্থানগুলি সিঙ্ক্রোনাইজ করতে হবে (সার্ভারটি চতুর্থ খেলোয়াড়)। বর্তমানে আমি রিয়েল টাইম আপডেটগুলি (প্যাডেল মুভমেন্ট), এবং গেম লবি স্থাপনের জন্য টিসিপি প্রেরণে ইউডিপি ব্যবহার করি etc.

বিপুল পরিমাণে ইউডিপি ট্র্যাফিক স্প্যামিং করা কি খারাপ কাজ নয়? ভিড়ের বৈশিষ্ট্যগুলির জন্য আমি কি ডিসিসিপি-এর মতো কিছু খুঁজছি? বা এটি কি এর মতো ছোট আকারের প্রকল্পে আসলেই সমস্যা নয়?

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

ক্লায়েন্টরা তাদের প্যাডেল অবস্থানগুলি একে অপরের সাথে পিয়ারের সাথে যোগাযোগ করার জন্য আরও ভাল হবে?

আমি পংয়ের প্রসঙ্গে এই প্রশ্নগুলি জিজ্ঞাসা করছি তবে অন্যান্য গেমস, বা সাধারণীকরণের সমাধানগুলিতে কীভাবে এই সমস্যাগুলি পরাভূত হবে সে সম্পর্কেও আমি আগ্রহী।


বিরক্ত করুন, পোস্ট করার ঠিক পরে আমি এটি দেখেছি: গেমদেব.স্ট্যাকেক্সেঞ্জ.কমিশন
249

অস্পষ্টভাবে সম্পর্কিত আরও একটি প্রশ্ন: গেমদেব.স্ট্যাকেক্সেঞ্জার
স্ম্যাসেরি

উত্তর:


5

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

প্রতিটি আপডেটের বিরতিতে প্রতিটি ক্লায়েন্ট তার প্যাডেল অবস্থান সার্ভারে অথবা প্রতিটি ক্লায়েন্টকে (পিয়ার-পিয়ার) প্রেরণ করে। সার্ভারটিও বলের অবস্থান এবং একটি বেগ ভেক্টর প্রেরণ করুন। প্রতিটি ক্লায়েন্ট একই পর্দার অঙ্কন কোডটি চালিত করতে পারে যেমন এটি একক প্লেয়ারের মতো হয় তাই বলের চলাচল মসৃণ হয়। মাল্টিপ্লেয়ারে যদিও আপনার কাছে কেবল সার্ভারই ​​নিয়মিত বিরতিতে বলটির জন্য অবস্থান / বেগের আপডেটগুলি প্রেরণ করে (এবং আপনি যদি প্রতিটি সময় পছন্দ করেন তবে এটি কোনও কিছুকে হিট করে)।

বলের অবস্থান আপডেটগুলি সমস্ত ক্লায়েন্ট জুড়ে একটি গেমটাইম রেফারেন্স করুন যাতে আপনি অর্ডার প্যাকেটগুলি ফেলে দিতে পারেন এবং এমনকি বলের অবস্থানের সংযোগ আরও নির্ভুল করে তুলতে পারেন (অতীতে নির্দিষ্ট সময় আপনি অবস্থান এবং বেগ জানেন যাতে আপনি নতুনকে ফাঁকে দিতে পারেন অবস্থান)।

ল্যাগি গেম সহ এই মডেলটির সাহায্যে আপনি হয়ত বলটি মাঝে মাঝে পিছনে চলে যেতে পারেন বা কিছুটা লাফিয়ে উঠতে পারেন see তবে একটি শালীন সংযোগের সাথে এটি বেশ মসৃণ হওয়া উচিত।


5

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

আপনি অবশ্যই ফ্রেমরেটের চেয়ে দ্রুত গতিতে আপডেটগুলি প্রেরণ করতে চান না, কারণ খেলোয়াড়রা পার্থক্যটি বলতে পারবেন না - সত্যিকার অর্থে, আপনি যদি কেবল দ্বিতীয় বার 10 বার প্যাকেট প্রেরণ করেন এবং প্রাপ্ত পরিণতিতে ফলাফলকে ফাঁস / উত্তোলন করেন , বেশিরভাগ খেলোয়াড় কোনও পার্থক্য লক্ষ্য করবেন না।


4

এটি একটি বিস্তৃত প্রশ্ন, তবে আমি গুরুত্বপূর্ণ দিকগুলি সংক্ষিপ্ত করার চেষ্টা করব।

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

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

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

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

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


1

আপনি কি প্রতারণার বিষয়ে চিন্তা করেন?

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

একটি পং ক্লোনটি আসলে কিছুটা জটিল, কারণ বেশিরভাগ গেমের বিপরীতে আপনি (বিকাশকারী হিসাবে) প্রতারণা করতে পারবেন না যার একপাশে হিট এবং অন্যটি না দেখে।

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


1

গুগল মৃত গণনা। 4 জন খেলোয়াড়ের জন্য আপডেট পাঠানো তাৎপর্যপূর্ণ হবে না। প্রেরিত ডেটার পরিমাণ বাইটের ক্রম হতে চলেছে। সুতরাং, এর অর্থ ঘন ঘন আপডেটগুলি ঠিক হওয়া উচিত। মৃত গণনা সহ, আপনি ক্লায়েন্ট এবং সার্ভারে প্লেয়ারটি সরিয়ে নিয়েছেন। সার্ভার কর্তৃপক্ষ। যখন ক্লায়েন্টের অবস্থান সার্ভার থেকে সিঙ্কের থেকে অনেক দূরে হয়ে যায়, তখন এটি আবার প্রান্তিককরণে ফিরে যেতে হয়। http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3 নেটওয়াকিং ইউডিপি ব্যবহার করে যাওয়ার উপায়। বুপডেটগুলি প্রায়শই প্রেরণ করা হবে যে হারিয়ে যাওয়া ডেটা শীঘ্রই যেভাবেই ইনকামিং ডেটা দ্বারা প্রতিস্থাপন করা হবে। খেলোয়াড়ের পজিশনের জন্য টিসিপির প্যাকেট retransmit উপযুক্ত নয় worth কীভাবে ক্লায়েন্ট এবং সার্ভারকে সিঙ্কে রাখা যায় সে সম্পর্কে আরও তথ্যের জন্য এই নিবন্ধটি দেখুন।


-1, কম সামগ্রী এবং এটি [বর্তমানে] ভুল বানান। এটা মৃত গণনা
টেট্রাড

আমার ডাউনভোট সরানো হয়েছে।
টেট্রাড

0

আমি কয়েক সপ্তাহ আগে 2-প্লেয়ার-লোকাল-নেটওয়ার্ক-পং গেমটি প্রোগ্রাম করেছি, আমি এটি কীভাবে করেছি তা এখানে:

-এক পক্ষের একটি সার্ভার খোলে, অন্যটি স্বয়ংক্রিয়ভাবে সংযুক্ত হয় - তারা উভয়ই তাদের প্যাডল এক্স অবস্থানকে একে অপরের দিকে স্প্যাম করছে @ 60fps বা তার চেয়ে কম [ইউডিপি] - যদি একটি পক্ষ বলকে আঘাত করে তবে নতুন বল এবং গতির অবস্থান সম্পর্কে তারা সিদ্ধান্ত নেবে that অন্য একটিতে [টিসিপি] - বলটি একটি প্যাডেলের পাশ দিয়ে উড়ে যায়, যে খেলোয়াড় এটি মিস করেছে সে অন্যটির সাথে স্কোর বার্তার সাথে যোগাযোগ করে এবং বলটি পুনরায় সেট করা হয় [টিসিপি] - বলটি সর্বদা স্বাধীনভাবে সিমুলেটেড হয়, যা পং এর সহজ বল পদার্থবিজ্ঞানের সাথে স্যুট করে

এটি 60fps এ প্রায় 0.3 থেকে 0.5 কেবি / সেক ট্র্যাফিক তৈরি করে এবং খেলোয়াড়দের তাদের উপলব্ধি থেকে কোনও পিছিয়ে নেই, তবে কেবল পিং একটি নির্দিষ্ট প্রান্তিকের নীচে থাকে, কারণ বলগুলি নতুন অবস্থানে প্রেরণ করা প্রয়োজন।

এছাড়াও এই সিস্টেমের সাথে প্রতারণা করা সহজ এবং খুব ক্ষতিকারক সংযোগের সাথে সিঙ্কের বাইরে চলে যাওয়ার উচ্চ সম্ভাবনা রয়েছে, তবে পং কে প্রতারণার বিষয়ে কে পাত্তা দেয়?!

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