আমি কীভাবে একটি ভিডিও গেমের প্রজেক্টিক্যালগুলি উপস্থাপন করব?


14

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

তবে এটি অনেক ব্যয়বহুল আকারে বড় দৃশ্যে ব্যয়বহুল বলে মনে হচ্ছে; আমি ভাবছি যে এই ধরণের ব্যবহারের ক্ষেত্রে অন্যান্য ধরণের কৌশল বা প্রয়োগগুলি কীভাবে ব্যবহৃত হয়। এফপিএসের মতো গেমগুলি প্রজেক্টিলগুলি (বুলেট, ট্যাঙ্ক শেলস ইত্যাদি) ট্র্যাকিংয়ের জন্য কী ব্যবহার করে?


5
প্রচুর এফপিএস গেমগুলি ধরে নেয় যে বুলেটগুলি তাত্ক্ষণিক, তবে এমন কিছু রয়েছে যা ট্র্যাজেটরিগুলি এবং ভ্রমণের সময় গণনা করে।
জন ম্যাকডোনাল্ড

2
+1 এটি একটি দুর্দান্ত প্রশ্ন, এবং আমি এটি অগত্যা 3 ডি তে সীমাবদ্ধ করব না।
ashes999

উত্তর:


8

জন্য খুব দ্রুত প্রজেক্টেআইল (যেমন লেজার বা বুলেট হিসাবে), আপনি ব্যবহার করতে পারে, একটি রায়

একটি রশ্মির একটি সূচনা পয়েন্ট এবং একটি শেষ পয়েন্ট থাকে। একটি রশ্মির জন্য (খুব ন্যূনতম) ডেটা স্ট্রাকচার হ'ল:

struct Ray
{
  Vector3f start, end ;
} ;

এটা এমন দেখতে:

এখানে চিত্র বর্ণনা লিখুন

(আপনি দিকনির্দেশক ভেক্টর এবং দৈর্ঘ্যও ক্যাশে করতে পারেন তবে আমি উপরে একটি খুব সাধারণ ডিফএন ব্যবহার করেছি)।

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

রশ্মি যদি ধীর প্রক্ষেপণ হয় (উদাহরণস্বরূপ বুলেটটির মতো), বুলেটটি একটি টাইমস্টেপে যে দূরত্বটি ভ্রমণ করেছিল তা রশ্মির সাহায্যে মডেল হয়। প্রারম্ভিক বিন্দুটি যেখানে ফ্রেমের শুরুতে রশ্মি থাকে এবং শেষ বিন্দুটি যেখানে ফ্রেমটি শেষ হওয়ার পরে হবে be বুলেটের রশ্মির যে কোনও কিছুই বুলেট দ্বারা ক্ষতিগ্রস্থ হয়।

গোলগুলি দক্ষতার সাথে গোলক, আবাবস, উত্তল হাল ইত্যাদির সাথে সংঘর্ষিত হতে পারে প্রকৃত চলমান প্রোগ্রামের জন্য আমার হালিনেটর প্রকল্পটি দেখুন (সিটিআরএল + রশ্মি ফায়ার জন্য ক্লিক করুন)


1
একটি রশ্মি অনেক প্রজেক্টিলের জন্য খুব ভাল কাজ করে না। উদাহরণস্বরূপ, ট্যাঙ্ক শাঁসের মতো লবড করা যায় এমন কোনও প্রক্ষিপ্ত। কিন্ত স্ট্রেট শট প্রজেক্টিলেসের জন্য রশ্মি দুর্দান্ত।
মাইকেলহাউস

ঠিক আছে, শেলটি যদি খুব ধীরে চলতে থাকে (বুলেট বা লেজারের সাথে তুলনা করা হয়), তবে হ্যাঁ আমি এটিকে একটি নিয়মিত শরীর (প্লেয়ারের মতো) হিসাবে মডেল করতাম
বোবোবো

7
প্রযুক্তিগতভাবে, একটি রশ্মি একটি সূচনা পয়েন্ট এবং একটি দিক। এটি একটি সূচনা পয়েন্ট এবং অন্য একটি বিন্দুর সাথে নির্ধারণ করা যেতে পারে, তবে এটি এর সংজ্ঞাটির অংশ নয়। সংজ্ঞা অনুসারে, রশ্মি অসীম, এবং এর কোনও শেষ বিন্দু নেই।
কেসি কুবাল

1
আপনি ঠিক বলেছেন, আমি যা বর্ণনা করেছি তা আসলে একটি লাইন বিভাগ , তবে সংঘর্ষ সনাক্তকরণের কথা বলার সময় বেশিরভাগ লোকেরা তাদেরকে রে বলে।
বোবোবোবো

3

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

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


2

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

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

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

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