দ্রুত, সঠিক 2 ডি সংঘর্ষ


17

আমি একটি 2 ডি টপডাউন শ্যুটারে কাজ করছি এবং এখন আমার বেসিক আয়তক্ষেত্রের বাউন্ডিং বক্স সংঘর্ষ সিস্টেমের বাইরে যেতে হবে।

আমার অনেকগুলি বিভিন্ন স্প্রাইটের সাথে বৃহত স্তর রয়েছে, যার সবগুলিই বিভিন্ন আকার এবং আকার। স্প্রিটের জন্য টেক্সচারগুলি স্বচ্ছ ব্যাকগ্রাউন্ড সহ সমস্ত বর্গক্ষেত্রের পিএনজি ফাইল so

আমি সংঘর্ষটি হ্যান্ডেল করার পরিকল্পনা করছি:

  1. কোনও স্প্রাইট প্লেয়ারের সীমার মধ্যে রয়েছে কিনা তা পরীক্ষা করে দেখুন
  2. একটি রেকর্ড বাউন্ডিং বক্স সংঘর্ষ পরীক্ষা করুন
  3. সঠিক সংঘর্ষ করুন (যেখানে আমার সাহায্যের প্রয়োজন)

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

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

উত্তর:


18
  1. প্রথম পদক্ষেপ, একটি গ্রিড তৈরি করুন এবং সরানো প্রতিটি বস্তুর জন্য এটি আপডেট করুন।
  2. কেবল একই স্কোয়ারের বস্তুর মধ্যে সংঘর্ষের জন্য পরীক্ষা করুন।
  3. বস্তুর সীমানা বাক্সটি ছেদ করে কিনা (তাদের ধারণকৃত আয়তক্ষেত্রটি) কিনা তা পরীক্ষা করুন।
  4. বাহ্যরেখার একটি কম রেজ ভার্সন ব্যবহার করে পিক্সেল নিখুঁত সংঘর্ষের জন্য পরীক্ষা করুন (গেম ফিজিক্স দেখুন)।
  5. গেম ফিজিক্স (Q 2) এ বর্ণিত রূপরেখার ট্রেসিংয়ের একটি সাধারণ চেক করুন

ধাপ 1:

একটি গ্রিড 2 ডি অ্যারে তৈরি করুন। প্রতিটি অবজেক্টই জানে যে এটি কোন বর্গ এর x, y অবস্থানের দ্বারা এটি দখল করে এবং এর প্রস্থ এবং উচ্চতা। যদি কোনও বস্তুকে সরিয়ে নেওয়া হয়, তবে এটি পুরানো বর্গ থেকে নিজেকে পরিষ্কার করে এবং এটি যে নতুন স্কোয়ারটি দখল করছে তা আপডেট করে।

এটি কেবলমাত্র n (অবজেক্ট) এর জন্য O (n) নেবে। যে কোনও নির্দিষ্ট বস্তুর জন্য ও (1)।

ধাপ ২:

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

ধাপ 3:

আয়তাকার আয়তক্ষেত্রগুলির মধ্যে ছেদ করার জন্য পরীক্ষা করুন Check যদি কোনও চৌরাস্তা না থাকে তবে থামুন।

পদক্ষেপ 4:

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

আপনার গেম জগতকে স্কোয়ারের গ্রিডে কীভাবে বিভক্ত করবেন সে সম্পর্কে ধারণার জন্য দয়া করে এটি পড়ুন :

একটি দক্ষ সংঘর্ষ সনাক্তকরণ সিস্টেম তৈরি করা

কীভাবে পিক্সেল নিখুঁত সংঘর্ষগুলি সনাক্ত করা যায় সে সম্পর্কে অন্তর্দৃষ্টির জন্য এটি পড়ুন ।

গেম ফিজিক্স / 2 ডি সংঘর্ষ সনাক্তকরণ AS3

আপনি পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নতি করতে পারেন:

  1. প্রথমটির তুলনায় চেক করার জন্য আউটলাইনের একটি কম রেজ (1/16) সংস্করণ সংরক্ষণ করা।

  2. দুটি অঞ্চল পুনরুদ্ধার করে এমন জায়গায় কেবল সেখানে পরীক্ষা করা।

  3. রূপরেখা মোটামুটি বিভাগগুলিতে বিভক্ত করে, এবং কেবলমাত্র প্রথম বিভাগগুলির মধ্যে সংঘর্ষের জন্য পরীক্ষা করে।

মন্তব্য করতে স্বাগত বোধ করি এবং আমি বিস্তারিত জানাতে হবে।

ছেদ করার জায়গায় পরীক্ষা করুন


1
আর্থার যেমন বলেছিলেন, আপনার 1. এবং 2 পদক্ষেপগুলি গ্রিডের সাথে প্রতিস্থাপন করুন এবং সঠিক সংঘর্ষ-সনাক্তকরণ হিসাবে, আপনি আপনার চিত্রগুলির একটি নিম্ন রেজোলিউশন সংস্করণ ব্যবহার করতে পারেন।
মার্কাস ভন ব্রডি

1
এবং যদি আপনার সত্যিই প্রয়োজন হয় তবে আপনি আমার উত্তরটির অনুরূপ কৌশলটিও
মার্কস ভন ব্রোডি

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

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

1
আমি আশা করি আপডেটটি বিষয়গুলি পরিষ্কার করতে সহায়তা করে। আপনার কিছু কোড লিখিত হয়ে গেলে আপনি কোড পর্যালোচনাতে এটি পোস্ট করতে পারেন এবং মন্তব্যের জন্য আমাদের লিঙ্ক করতে পারেন। codereview.stackexchange.com
wolfdawn
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.