নির্বিঘ্নে লুপিং 2 ডি মাল্টিপ্লেয়ার স্তর তৈরি করছেন?


15

একটি 2 ডি সাইড-স্ক্রোলিং মাল্টিপ্লেয়ার গেমটি কীভাবে তৈরি করা যায় যাতে একটি লুপিং স্তরের নকশা থাকতে পারে (স্টারবাউন্ডের চিন্তাভাবনা করুন এবং তাদের পৃথিবী কীভাবে লুপিং করছে) সে সম্পর্কে সম্প্রতি একটি আলোচনা এলো।

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

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

ভাবমূর্তি

এই উদাহরণে প্লেয়ার 2 ভাবেন তারা প্লেয়ার 1 দেখছেন তবে তারা আসলে তার ক্লোনটি দেখতে পাবে এবং বিপরীতে।

সমস্যাটি হাতে পাওয়ার জন্য এটিকে কিছুটা চরম এবং জটিল বলে মনে হয়েছিল। আমার প্রশ্ন এখন এই সমস্যাটি সমাধান করার জন্য এই সমাধানটি একটি ভাল পদ্ধতির কিনা তা জানতে হবে বা এই সমস্যা সমাধানের সহজ উপায় আছে কি?


খেলোয়াড়দের কি পূর্বের অঞ্চলে পিছনে যেতে অনুমতি দেওয়া হচ্ছে?
জিয়াওচুয়ান ইউ

হ্যাঁ, পিছনে পিছনে তাই এটি এক ধরণের "বিশ্ব জুড়ে" প্রভাব দেয়। স্টারবাউন্ডে একটি পৃথিবী কেমন হয় তার অনুরূপ
কেনকুইসো

2
আপনি কি বিশ্বকে একটি বড় চেনাশোনা হিসাবে বিবেচনা করেছেন? বা স্তরটিকে একটি বড় চেনাশোনা হিসাবে গণ্য করে এবং এটি একটি ফ্ল্যাট 2 ডি পর্যায়ে অনুবাদ করে?
Nzall

প্লেয়ারটি নিয়ন্ত্রিত হওয়ার সাথে আপনি কি ক্যামেরার অবস্থান সবসময় সারিবদ্ধ করতে পারবেন না?
Ali1S232

উত্তর:


16

এই সমস্ত ট্রিগার সহ এই সিস্টেমটি কিছুটা জটিল এবং ত্রুটির প্রবণ বলে মনে হচ্ছে।

আপনি যেমন কিছু সঙ্গে মডুলো ব্যবহার করে প্লেয়ার অবস্থান মোড়ানো করতে পারে playerPositionX = playerPositionX % mapWidth

এইভাবে যখন আপনার প্লেয়ার পৌঁছে playerPosition == mapWidthযায়playerPosition 0 ফিরে পুনরায় সেট করবে।

এই সমাধানটি পুরো রেন্ডারিং সিস্টেমের সাথে বাড়ানো যেতে পারে।


1
এর প্লেয়ারদের পজিশনের টেলিফোনে রিসেট দূরে থাকা প্লেয়ারদের দেখার বিষয়টি কী হবে না?
কেনকিউসো

আপনি কীভাবে রেন্ডারিং সিস্টেমে প্রসারিত করবেন?
মিকেল হ্যাগ্রস্টেম

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

4
@ মিকাএলহিগস্ট্রোম ঠিক যথারীতি রেন্ডার করুন তবে ডান প্রান্তের কাছের জিনিসগুলি বাম দিকে (অর্থাত্ pos - map_width) দ্বিতীয়বার উপস্থাপন করতে হবে ।
মারিও

1
আপনার কোডের যে কোনও জায়গায় আপনি 'এই স্থানাঙ্কের মধ্যে কী জিনিস' বা 'এই বস্তুর স্থানাঙ্কগুলি কী' সন্ধান করছেন, আপনি এটিকে xcoord% মানচিত্রের প্রশস্ত করতে পারবেন। আপনার কোড ব্যতীত বলা শক্ত, তবে সম্ভবত এটি সঠিকভাবে রেন্ডার হতে পারে।
টিন ম্যান

13

ক্যানোনিকাল সমাধান পোর্টাল ব্যবহার করা হয় । আপনার উদাহরণে, কেবলমাত্র একটি স্তর রয়েছে, বাম এবং ডান প্রান্তকে সংযোগকারী একটি পোর্টাল বাদে।

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

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

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

পোর্টালগুলির সম্পর্কে দুর্দান্ত জিনিসটি এটি খুব শক্তিশালী। বিল্ড ইঞ্জিন এটি "সত্য" 3 ডি ইঞ্জিন না হওয়া সত্ত্বেও বহু-স্তরের স্তরের অনুকরণে এটি ব্যবহার করেছিল। কিছু আধুনিক ইঞ্জিন ইউক্লিডিয়ান বিহীন স্থান তৈরি করতে পোর্টালগুলিও ব্যবহার করে; পোর্টাল এবং আন্টিক্যাম্বার 3 ডি-তে উল্লেখযোগ্য উদাহরণ।


2
আপনি যদি পোর্টাল গেমের ভাষ্যটি শোনেন তবে গর্তের মাধ্যমে যা দৃশ্যমান তা ক্লোন করে পোর্টালগুলি যেভাবে কাজ করে তার কিছু অংশ প্রয়োগ করা হয়। (তবে রেন্ডারিংয়ের চেয়ে পদার্থবিজ্ঞানের কারণে)
হাঁসকে

6

মনে রাখবেন যে আপনি যা স্ক্রিনে প্রদর্শন করেন এবং মেমরিতে যা হয় তা দুটি সম্পূর্ণ আলাদা জিনিস। কল্পনা করুন আপনার কাছে এমন একটি উইন্ডো রয়েছে যা আপনাকে বিশ্ব সম্পর্কে ডেটা পূরণ করতে হবে। আপনি উইন্ডোটি বাম থেকে ডানে পূরণ করুন। আপনি বিশ্বকে পূরণ করার জন্য আপনার ডেটা পার্স করার সময়, আপনি যদি বিশ্বের শেষ প্রান্তে পৌঁছান, কেবল আপনার ডেটার শুরুতে ফিরে লুপ করুন। একটি মডুলো অপারেশন ব্যবহার করা আদর্শ। মনে রাখবেন আপনার প্রতিটি কিছুর জন্য এটি করা দরকার । অভিক্ষেত্র, রশ্মি, খেলোয়াড়, পদার্থবিজ্ঞান; বিশ্বের সীমানা অতিক্রম করার সময় তাদের সকলের নিজের অবস্থান মোড়ানো দরকার।

প্রতিটি প্লেয়ার ডেটা ভাগ করে তবে তাদের ডেটাগুলির নিজস্ব দৃষ্টিভঙ্গি রয়েছে। তাদের উইন্ডোগুলি পৃথিবীতে কোথায় দাঁড়িয়ে রয়েছে তার উপর নির্ভর করে আলাদাভাবে জনবহুল হয়।

এর অর্থ ক্লোন তৈরি বা কাউকে টেলিপোর্ট করার দরকার নেই। মূলত আপনি হয় ক্লোনস তৈরি, শুধু একে অপরের পর্দা অক্ষরের রেন্ডারিং করে।


3

বিশ্ব থেকে রেন্ডারিংকে সংযোগ বিচ্ছিন্ন করুন এবং আপনি কোনও ক্লোনিং বা টেলিপোর্টিং শিল্পকর্মের অবলম্বন ছাড়াই মোড়ক এবং সঠিক রেন্ডারিং করতে পারেন।

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

দ্বিতীয়ত, রেন্ডারিংয়ের জন্য আপনি পজিশনে মডুলো করবেন। সুতরাং পর্দার বাম দিকটি "বেস" এবং ডান দিকটি "বেস + আকার"। সুতরাং আপনি এই ব্যাপ্তির মধ্যে যে কোনও কিছুর জন্য আপনার বিশ্ব জুড়ে দেখুন। আপনি প্রকৃতপক্ষে মডুলো ব্যাপ্তিটি অনুসন্ধান করবেন যা এটিকে আবার মানচিত্র করে 0...Width

অনুসন্ধানের সময় কৌতুকটি হ'ল Baseবাম পাশের সাথে সম্পর্কিত অবজেক্টের অবস্থান ফিরে পাওয়া । এটি স্ক্রিনের স্থানীয় স্থানাঙ্কগুলিতে রূপান্তর করে যাতে রেন্ডারারকে নিজেই মডুলো সম্পর্কে চিন্তা করতে হবে না, কেবলমাত্র অনুসন্ধানের জন্য।

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

যদি আপনার পৃথিবীটি বিভাগগুলিতে উত্পাদিত হয় বা 3 ডি স্ট্রাকচার ব্যবহার করে থাকে তবে আপনাকে এটি ভাগ করতে হবে। সুতরাং এটি একটি স্বতন্ত্র ব্লক নয়, তবে এই রেন্ডারিংটি সামঞ্জস্য করতে সরানো যেতে পারে। আপনার কমপক্ষে 2 এ অনেকগুলি ব্লকের দরকার নেই।


1

আমি মনে করি গেম এবং ব্যবহারকারীর কাছে সম্পূর্ণ স্বচ্ছ একটি অন্তর্নিহিত ডেটা-কাঠামোয় আপনার মোড়ানো বিশ্বকে কার্যকর করার একমাত্র যুক্তিযুক্ত পন্থা হ'ল। সুতরাং কয়েকটি নিম্ন-স্তরের আপনার একটি ফাংশন ম্যাপকর্ডিনেট () রয়েছে যা আপনার প্রকৃত স্থানাঙ্কগুলি আপনার অন্তর্নিহিত মানচিত্র-সংস্থানগুলিতে গুটিয়ে রাখে ...

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

সুতরাং পুরো গেমটির যুক্তি এবং অন্যান্য সমস্ত কিছুর জন্য এটি যেমন আপনার কাছে অসীম বিশাল পৃথিবী রয়েছে, সেখানে সবকিছুর অনুলিপি রয়েছে।


1

এটি একেবারে সমান নয়, তবে আমি গেম জ্যামে একই জাতীয় কিছু প্রয়োগ করেছি। গেমটিতে খেলোয়াড়রা একটি ছোট বৃত্তাকার স্তরে চলেছিল, যখন প্লেয়ার পাইয়ের একটি 'এক্স' অবস্থানে পৌঁছেছিল তখন চারদিকে মোড়ানো ছিল। রেন্ডারিং সহজ ছিল কারণ আমরা কেবল সবকিছু রেন্ডার করেছি এবং তারপরে যা চলছে তা ট্র্যাক করতে একটি অফসেট ক্যামেরা ঘোরানো হয়েছিল। আপনি অনুরূপ কিছু বাস্তবায়ন করতে পারেন, যেমন উপরে পরামর্শ দেওয়া হয়েছে:

  • অঙ্কন করার সময়, ক্যামেরার অবস্থানটি পরীক্ষা করুন এবং ক্যামেরা অবস্থান এবং এর দৃষ্টিভঙ্গি পরিসীমা বিবেচনা করে কী আঁকতে হবে তা নির্ধারণ করুন।
  • যে ক্ষেত্রে ক্যামেরা মানচিত্রটির 'প্রান্ত' পেরিয়ে যায়, সেই প্রান্তটি আঁকতে বিশ্বের অন্য প্রান্ত থেকে উপযুক্ত পরিমাণ সামগ্রী বেছে নিন, সাধারণত মাত্রাটি তাদের অবস্থানের প্রস্থকে যোগ বা বিয়োগ করে।
  • গেম লজিকের এই সিম সম্পর্কে সচেতন হওয়া এবং অন্যান্য উত্তরে উল্লিখিত হিসাবে এর জন্য সামঞ্জস্য করা দরকার। বিশেষভাবে সচেতন হওয়া ক্ষেত্রে হ'ল সংঘর্ষগুলি যেখানে একদিকে এক বস্তু থাকে তবে অন্যদিকে কোনও বস্তুর সাথে সংঘর্ষ হয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.