আমি কীভাবে এমন কণা তৈরি করব যা খেলোয়াড় এবং শত্রুদের প্রতিক্রিয়া জানায়?


38

আমি বর্তমানে আমার নিজের গেম ইঞ্জিন দিয়ে একটি গেম তৈরি করছি যা আমি সি ++ তে লিখেছি এবং আমি সর্বাধিক সাম্প্রতিক ডাইরেক্টেক্স এসডিকে ব্যবহার করছি।

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

C ++ এ আসলে আমি একজন অভিজ্ঞ প্রোগ্রামার। তবে আমি জানি না কীভাবে এই প্রভাবটি কার্যকর করা যায়। কারও কাছে কি শীতল ধারণা বা ডিজাইনের পছন্দ রয়েছে যা আমি দেখতে চাই? আপনার অভিনব যে কোনও ডিগ্রীর জবাব নির্দ্বিধায় দিন।

উত্তর:


65

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

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

  2. আপনি যদি তাদের জাহাজ থেকে সরে যেতে চান এবং তারা চলে যাওয়ার পরে চালিয়ে যান। এটি সাধারণত খালি জায়গায় স্ট্যান্ডার্ড পদার্থবিদ্যার মতো যেখানে কোনও চাপ (বা খুব ছোট) চাপের গ্রেডিয়েন্ট থাকে না।

  3. আপনি (1) এবং (2) হিসাবে যেমন জাহাজটি কাছাকাছি চলে আসার সাথে সাথে কণা দ্রুতগতিতে সরিয়ে নিতে চান, তবে একবার জাহাজটি চলে গেলে কণাগুলি আস্তে আস্তে নিজেকে পুনরায় ভারসাম্যহীন করে তুলবে আপনার জাগ্রত হতে id

তিনটি সমাধানের মধ্যেই সাধারণ : আপনার একটি শিফার ক্ষেত্র থাকা উচিত যা আপনার জাহাজের সাথে চলাফেরা করে। এই উদাহরণে আমরা এটিকে বিজ্ঞপ্তি করব। তারপরে আপনি ভেক্টর শনাক্ত করেন, এটিকে অঞ্চলের মধ্যে জাহাজ এবং প্রতিটি কণার মধ্যবর্তী স্থানে একে v1 বলুন। আপনার কণাকে সেই ভেক্টর ধরে দূরে ঠেলে দিন। আপনি কতটা দৃ strongly়ভাবে এটিকে দূরে সরিয়ে ফেলবেন তা জাহাজের দূরত্বের উপর নির্ভর করবে: ব্যবহার 1 - v1.magnitude। এই সূত্রটি আপনাকে একটি রৈখিক শক্তি দেবে, তবে আপনি একটি বৃত্তাকার শক্তি বক্ররেখার মতো অন্য কিছু ব্যবহার করতে এটি পরিবর্তন করতে পারেন যা প্রান্তগুলির দিকে শক্তি হ্রাস পায়। এটি এটিকে আরও চেহারা দেবে যেমন জাহাজের চারপাশে বিজ্ঞপ্তি চাপের পরিবর্তে একটি গোলাকার রয়েছে।

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

সমাধান 2 এর জন্য : ভিউ পজিশনে কেবল v1 প্রয়োগ করার পরিবর্তে প্রতিটি যুক্তি আপডেটে এটি কণার অবস্থানে প্রয়োগ করুন । তাই p1.position += v1,। সুতরাং আপনি কণায় একটি ত্বরণকারী বল প্রয়োগ করছেন, যা বেগকে অনুবাদ করে। সম্ভবত, আপনি প্রতিটি কণার বেগকে স্যাঁতসেঁতে দিতে চান যাতে তারা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কমবে। আপনি দেখতে পাচ্ছেন যে কীভাবে এই সমাধানটি আপনার নীহারিকার মধ্যে কান্ডযুক্ত গুচ্ছগুলি তৈরি করবে, কারণ তারা কখনই পুনরায় ব্যবহার করবে না। বাস্তববাদী নয়, আমি নিশ্চিত, যেহেতু নীহারিকাগুলির মধ্যে চাপের গ্রেডিয়েন্ট রয়েছে, বাস্তবে যতটা দুর্বল তা বিবেচনা না করেই।

সমাধানের জন্য 3: (2) হিসাবে একই, তবে এই ক্ষেত্রে আপনাকে আপনার কণাগুলি পুনরায় ব্যবহার করতে হবে। এটি সহজেই করা নিখুঁত শক্তির পদ্ধতির কিছুটা হলেও এটি যেহেতু কেবলমাত্র কণা এবং এইভাবে চোখের ক্যান্ডি, তাই সম্ভবত আপনার আগ্রহের বিশাল ক্ষেত্রটি আবরণ করার প্রয়োজন নেই (সম্ভবত প্লেয়ার পজিশনের একটি ব্যাসার্ধ + ম্যাকপ্লেয়ারস্পিপিটিক, বা যা কিছু আয়তক্ষেত্রাকৃতির অঞ্চলটি যুক্তিযুক্ত উদ্দেশ্যে বিবেচনা করে)। প্রতিটি কণা আগ্রহের ক্ষেত্রের মধ্যে একে অপরের কণায় একটি বল প্রয়োগ করবে। তারা আবার একে অপরের দূরত্বের ভিত্তিতে বাহিনী প্রয়োগ করবে। আগ্রহের ক্ষেত্র জুড়ে সমস্ত আন্তঃখণ্ড বাহিনীকে একক ঝাড়ুতে গণনা করুন এবং তারপরে সমস্ত বাহিনীকে একটি ঝাড়ুতে প্রয়োগ করুন। শেষ অবধি, নিশ্চিত হয়ে নিন যে আপনি শূন্য গতিবেগের কণাগুলিতে কেবল এই আন্ত-কণা বল প্রক্রিয়াকরণ সম্পাদন করছেন। এবং একবার প্রদত্ত কণা কিছুটা ন্যূনতম গতিতে পৌঁছে যায়,

এখানে সমস্ত ধরণের বিবিধ সূত্র ইত্যাদি রয়েছে, তবে আমি মনে করি এই ক্ষেত্রে একটি সহজ সমাধান সবচেয়ে ভাল কাজ করে।


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

মজাদার মোট আনন্দ, এটি একটি ভাল প্রশ্ন এবং এর জন্য মস্তিষ্ককে নমনীয় করে তোলা!
ইঞ্জিনিয়ার

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