আমি কীভাবে দ্রুত, নির্ভুল 2D সংঘর্ষ সনাক্তকরণ কার্যকর করতে পারি?


11

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

বিভিন্ন ফোরামে কোয়াডট্রি, বি-ট্রি এবং আপনি যে কোনও ধরণের গাছ বা কাঠামোর কথা চিন্তা করতে পারেন the

সংঘর্ষ পরীক্ষা করা উচিত কিনা তা নির্ধারণের জন্য সবচেয়ে দক্ষ কাঠামো কী?


1
আপনি যে বিষয়টিকে বিবেচনা করতে চাইতে পারেন তা হ'ল কেবল স্থানান্তরিত বস্তুর জন্য সংঘর্ষের পরীক্ষা করা এবং কেবল আপনার কাছে থাকা বস্তুগুলি। আমার বর্তমান সিস্টেমটি ভাল কাজ করে (কয়েক হাজার বস্তু) - এবং আমি এটাই করছি।
আল্টিফিনিটাস

আমি মনে করি গেমদেব.স্ট্যাকেক্সেঞ্জারভিউ / সেকশনস / ১৪৩69 / / আপনি আপনাকে অনেক সাহায্য করতে পারেন। এটি মূলত সমান্তরাল প্রক্রিয়াকরণের জন্য এবং অ্যালগরিদমের জন্য বোঝানো হয়েছিল তবে আমি মনে করি একই অ্যালগরিদমটি একক থ্রেডেড অ্যাপ্লিকেশনগুলিকেও উন্নত করতে পারে।
Ali1S232

1
@ মাল্টিফিনিটাস এটিই মূলত যা আমি জিজ্ঞাসা করছি। প্রতিটি বস্তুর পুনরাবৃত্তি না করে এবং এর অবস্থানটি পরীক্ষা না করে কোন জিনিসগুলি কাছাকাছি রয়েছে তা আমি কীভাবে নির্ধারণ করব?
মাইক ক্লাক

মাইক, আপনি যে নির্দিষ্ট কোডটি আমি ব্যবহার করেছি তার জন্য আপনি আমাকে ইমেল করতে পারেন, এটি সি ++ এ রয়েছে - বা আমি আপনাকে প্রাথমিক কাঠামোটি দিতে পারি, যদিও এটির কারণে এটি অস্পষ্ট এবং জটিল হতে পারে।
আলটিফিনিটাস

1
এটি কোনও সদৃশ নয় কারণ আমি জিজ্ঞাসা করছিলাম যে আমাদের কোনও সংঘর্ষের জন্য চেক করা উচিত কিনা তা নির্ধারণের জন্য কোন ধরণের কাঠামো সবচেয়ে উপযুক্ত। অন্য প্রশ্নটি স্বচ্ছ বনাম অপ্রচ্ছন্ন সংঘর্ষের বিষয়ে জিজ্ঞাসা করেছিল। উল্লেখ করার মতো নয়, আপনি যে লিঙ্ক করেছেন তার এক বছর আগে এই প্রশ্ন জিজ্ঞাসা করা হয়েছিল।
মাইক ক্লক

উত্তর:


12

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


এই সমাধানটি 2 বা 4 গ্রিড কোষের সীমানাযুক্ত বস্তুর সাথে কীভাবে व्यवहार করবে?
ashes999

1
যে কোনও ঘর বস্তুটি ওভারল্যাপ করে, সেটিকে এটি মনে করা হয়, সুতরাং কোনও বস্তু একাধিক কক্ষে থাকতে পারে। বেশিরভাগ স্থানিক ডেটা স্ট্রাকচার একইরকমভাবে ওভারল্যাপের বিষয়টি মোকাবেলা করবে।
ডারসি রায়নার

বাহ, এটা খুব স্মার্ট। +1 চিয়ার্স বন্ধু
ashes999

1

বক্স 2 ডি এবং চিপমঙ্কের মতো 2D পদার্থবিজ্ঞানের ইঞ্জিনগুলি একটি স্থানিক হ্যাশ মানচিত্রের ভারী ব্যবহার করে

রেফারেন্সের জন্য http://chipmunk-physics.net/release/ChipmunkLatest-Docs/#CollisionDetection দেখুন । চিপমুন্ক ডেমোতে সত্যই একটি ভাল স্থানিক হ্যাশ ভিজ্যুয়ালাইজার অন্তর্ভুক্ত থাকে যা তারা কৌশল কীভাবে কাজ করে তা এটি স্পষ্ট করে তোলে।


1

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

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

যদি সেগুলি সমস্ত মাঝারি আকারের অবজেক্ট থাকে যা পর্দার প্লেয়ারের কাছে দৃশ্যমান হয় তবে সবকিছু বনাম সমস্ত কিছু সম্ভবত খুব খারাপ নয়।

তা ছাড়া আমি ডার্সির সাথে আছি, ইউনিফর্ম গ্রিডটি ভাল।

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