একটি 2 ডি প্ল্যাটফর্ম গেমে, খেলোয়াড় opালু মাঠের উপরে মসৃণভাবে সরানো কীভাবে নিশ্চিত করবেন?


18

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

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

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

কোন পরামর্শ ব্যাপকভাবে প্রশংসা হবে।


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

উত্তর:


14

প্ল্যাটফর্মিং এবং ফিজিক্স

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

হালস জেনারেট করুন

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

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

একে অপরের বিরুদ্ধে বহুভুজগুলি ক্লিপ করে এবং ক্লিপ পয়েন্টগুলিকে একটি প্রান্ত তালিকায় যোগদান করে আপনি জেনেরিক ক্ষেত্রে হুলগুলি তৈরি করতে পারেন।

Opালু সারফেস

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

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

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

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


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

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

জেনেরিক পদার্থবিজ্ঞানের ইঞ্জিনগুলি থেকে ধারণাগুলি গ্রহণ এবং প্ল্যাটফর্ম গেমগুলিতে প্রয়োগ করার ক্ষেত্রে আপনি সমস্যাগুলি সম্পর্কে আরও কিছু ভাল পয়েন্ট উত্থাপন করেছেন। আমি অনুরূপ ইঞ্জিনগুলি দেখেছি যা আপনি আলোচিত ধারণাগুলি বাস্তবায়িত করেন (slালু ধরণের সংঘর্ষকে সাধারণভাবে সংশোধন করে, এবং playerালের উপরে প্লেয়ারকে চুষে), তাই কমপক্ষে সেই সমস্যাগুলি মোটামুটি সহজেই সমাধানযোগ্য। আমার কাছে প্রধান স্টিকিং পয়েন্ট হ'ল সংখ্যাসূচক ত্রুটি সম্পর্কিত জটিল কৌশলগুলি edge
নিক কোভাক

@ কোভাসা: আবারও, আপনি যখন কিনারাটি প্রথম স্থানে সংঘর্ষের অংশ না হয়ে উঠতে পারেন সেগুলি থেকে মুক্তি পেলে সেই বিশেষ ত্রুটিগুলি অদৃশ্য হয়ে যায়। নিরবচ্ছিন্ন আকার গঠনের জন্য একসাথে প্রান্তগুলি শিকল করুন। আপনার স্তরটি ডিজাইন করার সময়, আমি পাশাপাশি শীর্ষগুলি একসাথে ছড়িয়ে দেওয়ার পরামর্শ দিই যাতে আপনার পৃষ্ঠগুলিতে কোনও ছোট ক্রাভিস না থাকে। আপনি কীভাবে 3 ডি জাল সম্পাদকটিতে স্তরটি ডিজাইন করেন তার চেয়ে আলাদা কিছু নয়।
শান মিডলডিচ

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

5

আমি মনে করি সংঘর্ষের প্রতিক্রিয়া উদ্দেশ্যে, আপনার বাক্সগুলি চিকিত্সা করে উভয় সমস্যার সমাধান করা যেতে পারে, যেন তাদের গোলাকার কোণ রয়েছে (আপনার সংখ্যাগত ত্রুটির অনুরূপ ব্যাসার্ধের)। এটি এ এবং বি এবং বি এবং সি এর মধ্যে মিটিং কোণগুলির কার্যকর সম্মিলিত পৃষ্ঠকে মসৃণ করবে।

সুতরাং, প্লেয়ার বাম দিকে সরানো যদি এ এর ​​কোণায় চলে যায় তবে সংঘর্ষটি স্বাভাবিকভাবে খাঁটি ডানদিকে না বরং তির্যক হবে, সুতরাং বাম এবং আপ গতির ধারাবাহিকতা মঞ্জুর করে।


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

আপনি বলছেন যে আপনি বিশেষত ওবিবি-র জন্য একটি সংঘর্ষের অ্যালগরিদম ব্যবহার করছেন তবে আপনি এখনও ওবিবি-ওবিবি সংঘর্ষের সন্ধানের পরে এমন একটি আকারের বিরুদ্ধে আরও একটি পরীক্ষা ব্যবহার করতে পারবেন যা পুরোপুরি ওবিবির মধ্যে রয়েছে within


হুঁ, আকর্ষণীয় ধারণা ... আপনি কীভাবে এটি বাস্তবায়ন করবেন? যদিও বাক্সগুলি ব্যবহার করার সরলতার বিরুদ্ধে এটি কিছুটা হলেও যায়: (আমি একমত যে এটির একটি সাধারণ সমাধান হিসাবে একটি নির্দিষ্ট সমাধান হওয়া উচিত বলে মনে হচ্ছে তবে আমি এটি সম্পর্কে আসলে কোনও কভারেজ পাই না ... যা করা হচ্ছে তা বাদ দিয়ে বক্স 2 ডি-তে আমি আশা করি আরও অন্তর্দৃষ্টি পাওয়ার জন্য তাদের ফোরামে একটি অনুরূপ প্রশ্ন পোস্ট করেছি
নিক কোভাক

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

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

লেজস: ডিওহ! ঠিক আছে, আমি যতটা ভাবছিলাম তেমন সহজ নয়।
কেভিন রেড

হ্যাঁ, এটি সম্পর্কে চিন্তা করার পরে, ক্যাপসুল অ্যাপ্রোচ সম্ভবত 2 ডি প্ল্যাটফর্মারের চেয়ে 3 ডি গেমের পক্ষে বেশি উপযুক্ত। পিক্সেলের নিখুঁত নিয়ন্ত্রণ রাখা অবশ্যই আমার পক্ষে অগ্রাধিকার (যেমনটি পুরানো 2D প্ল্যাটফর্মার মধ্যে ছিল)। তবে এমন একটি সমাধান অবশ্যই থাকবে যা বাক্সগুলি ব্যবহার করার অনুমতি দেয়!
নিক কোভাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.