সংঘর্ষ শনাক্ত করার যুক্তি কোথায় রাখা উচিত?


19

আমি একটি ছোট 2 ডি গেম ইঞ্জিন বিকাশ করছি। অক্ষরগুলির একটি পেইন্ট পদ্ধতি রয়েছে যা বর্তমানে নিম্নলিখিতটি করে:

  1. চরিত্রের গতি ইত্যাদি অনুযায়ী তার নতুন অবস্থান গণনা করুন etc.
  2. সংঘর্ষ গ্রিড সেল আপডেট করুন **
  3. চরিত্রটি নতুন অবস্থানে আঁকুন

** চৌরাস্তা পরীক্ষার সংখ্যা হ্রাস করার জন্য আমি একটি সংঘর্ষের গ্রিড তৈরি করেছি

সংঘর্ষ সনাক্তকরণের জন্য এখন আমি যে প্রাথমিক অ্যালগরিদমটি ভেবেছিলাম তা হ'ল:

For Each Character
    Check intersection with characters in surrounding 8 cells

আমি কেবল পেইন্ট পদ্ধতিতে এই কোডটি রাখতে পারি। তবে সমস্যাটি আমি এখানে প্রত্যাশা করি।

ধরুন, দুটি এবং A অক্ষর সংঘর্ষের গ্রিডের সংলগ্ন কোষে রয়েছে। চরিত্র এ এর ​​পুনরাবৃত্তির উপরোক্ত অ্যালগরিদম অনুসারে এটি সনাক্ত করবে যে এটি বি এর সাথে সংঘর্ষে রয়েছে এবং বি চরিত্রের পুনরাবৃত্তিতে এটি সনাক্ত করবে যে এটি এ এর ​​সাথে সংঘর্ষিত হয়েছে।

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

এই পদ্ধতির সঠিক হবে? আপনি এই জাতীয় সমস্যাটি কীভাবে পরিচালনা করেছেন? আমি নিজেই সংঘর্ষের গ্রিড জিনিসটি ভেবেছিলাম। সংঘর্ষ গ্রিড যুক্তির কোন বিকল্প আছে?


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

উত্তর:


14

সংঘর্ষ সনাক্তকরণের জন্য সাধারণ পদ্ধতির মধ্যে এ বা বি এর নিজস্ব সংঘর্ষের সনাক্ত না করা।

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

সুতরাং সংক্ষেপে, আপনার পেইন্ট () ফাংশনের ভিতরে "মুভ, সংঘর্ষের জন্য পরীক্ষা করুন, আঁকুন" পরিবর্তে আপনি "মুভ" এবং "অঙ্কন" আলাদা আলাদা ফাংশনে ভাগ করুন যা আপনি পৃথকভাবে প্রতিটি বস্তুর জন্য "প্রথম স্থানান্তর" কল করেন, তারপরে প্রতিটি বস্তুর জন্য "আঁকুন")। এবং তাদের মধ্যে, সংঘর্ষের জন্য পরীক্ষা করুন।

উন্নত দ্রষ্টব্য: যদি আপনার কোনও বস্তু সনাক্ত হওয়া সংঘর্ষের প্রতিক্রিয়াতে নিজেকে সরিয়ে নিয়ে যায়, তবে কোনও বস্তুর সংঘর্ষ-প্রতিক্রিয়া অন্য কোনও সংঘর্ষের কারণ হয়ে উঠলে আপনাকে "সমস্ত বস্তুর মধ্যে সংঘর্ষের সন্ধান করুন" পদক্ষেপটি পুনরাবৃত্তি করতে হবে।


এটি জিনিস করার সঠিক উপায়। বস্তুগুলিকে তাদের দায়িত্বগুলি পরিচালনা করতে দিন এবং সংঘর্ষের সিস্টেমটি সিদ্ধান্ত নিতে হবে যে তারা কোনও বাধা দেখা দিলে কী ঘটে। প্রারম্ভিক ট্রিগার হিসাবে আপনার অক্ষরগুলির চারপাশে একটি সংঘর্ষের আয়তক্ষেত্র / সিলিন্ডার (2 ডি / 3 ডি) থাকতে পারে।
জেমস পি।

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

এটি কীভাবে পরিচালনা করবেন - গেমদেব.স্ট্যাকেক্সচেঞ্জ
ক্র্যাকার

1

আপনি যেমন বলেছেন গেম লুপে আমি আমার সমস্ত চরিত্রের জন্য একটি লুপ চালাচ্ছি run

আমি যেভাবে এটি করি তা আমার প্রতিটি চরিত্রের সাথে একটি রাষ্ট্রের সাথে হয়, সুতরাং যদি A এবং B এর সংঘর্ষের পরীক্ষা করা হয় তখন A এবং B হিট হয়ে যায়। বি এর লুপের শুরুতে এটি এটি ইতিমধ্যে হিট হয়েছে কিনা তা পরীক্ষা করে দেখায়, যদি আইডি লুপটি চালায় না।

আমি লুপটিতে ইমপ্যাক্ট কোডটি রেখেছি সুতরাং খ-এর উপর যে কোনও পদক্ষেপ নেওয়া উচিত তা এ এর ​​লুপে ঘটেছে তাই বিয়ের কোনও কারণ নেই যাতে এটি সংঘর্ষের ফলাফলকে গোলমাল করে দেবে, যদিও এটি আপনার পক্ষে আলাদা হতে পারে ।


তবে এই ক্ষেত্রে যখন এ বি এর সাথে ছেদ সনাক্ত করে, বিহিতটি সত্য হয়ে যাবে এবং সুতরাং বি কোনও ছেদটি অনুসন্ধান করবে না। তবে অন্য একটি চরিত্র সি দিয়ে বি ছেদ করলে, বি এটি সনাক্ত করবে না?
ক্র্যাকার

দুঃখিত, বুঝেছি যেহেতু এ সি দিয়ে ছেদ করে না, সিহিত এখনও মিথ্যা হবে। বি সংঘর্ষের জন্য চেক করবে না। তবে সি চেক করবে এবং বি-তে তথ্য পৌঁছে দেবে যে বি এবং সি কুলের মধ্যে একটি সংঘর্ষ রয়েছে!
ক্র্যাকার

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

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