বুলেটগুলি ভিডিও গেমগুলিতে কীভাবে কাজ করে?


64

আমি যখন সি # তে একটি ভিডিও গেম ডিজাইন করছিলাম তখন আমি এই প্রশ্নটি জুড়ে এসেছি।

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

আমি প্রশ্নটি পড়েছিলাম কীভাবে বুলেটগুলি ভিডিও গেমগুলিতে সিমুলেটেড হয়? তবে বুলেটগুলি প্রোগ্রামের নকশার দৃষ্টিকোণ থেকে কীভাবে কাজ করে তা স্পর্শ করে না।

আমার কয়েকটি ধারণা ছিল, কিন্তু প্রত্যেকেরই এর ত্রুটি রয়েছে:


আমি সবচেয়ে কার্যকর পদ্ধতিটি (2 ডি গেমসের জন্য) ভাবতে পারি:

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

  • 1 বেগ

  • 2 যেখানে এটি থেকে গুলি করা হচ্ছে পদে শুরু

  • 3 স্প্রাইট টেক্সচার

  • 4 একটি হিট প্রভাব

যেহেতু বুলেটটি তার নিজস্ব শ্রেণি হবে তাই এটি অঙ্কন, চলন এবং ক্রিয়া শ্রোতাদের নিজেরাই পরিচালনা করতে পারে।

এই হাজার হাজার বস্তু তাত্ক্ষণিকভাবে স্থাপন করা, তারপরে ধ্বংস (যখন হিট প্রভাবটি ট্রিগার করা হয়) তখন প্রক্রিয়াজাতকরণের পক্ষে কি শক্ত হবে না? র‌্যাম স্পেস?


3 ডি গেমগুলির জন্য কার্যকর পদ্ধতি - আমার মনে হয়েছিল আরও একটি ধারণা:

বলি আমি একটি অস্ত্র শ্রেণি তৈরি করি। এই অস্ত্রটির বিভিন্ন বৈশিষ্ট্য রয়েছে যার মধ্যে কয়েকটি:

  • 1 অস্ত্রটি কোথায় লক্ষ্য করে চলেছে তা সনাক্ত করুন এবং এটি কোনও লক্ষ্য লক্ষ্য করছে কিনা তা নির্ধারণ করুন

  • 2 বন্দুকের শুটিংয়ের একটি অ্যানিমেশন ট্রিগার করুন

  • 3 এর একটি ডোডামেজ () পদ্ধতি রয়েছে যা বন্দুকের দিকে ইশারা করে যা কিছু থেকে স্বাস্থ্য বিয়োগ করতে কিছু নির্দেশ করে

  • 4 বোতাম টিপে গেলে বুলেট অ্যানিমেশন ক্লাসটি জানায়

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


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

আমার প্রশ্ন, গেম স্রষ্টাগুলি এটি সবচেয়ে কার্যকরী উপায় কী? এই পদ্ধতিটি কি 2 ডি থেকে 3 ডি গেমগুলিতে পরিবর্তিত হয়?


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

42
বুলেটগুলি সাধারণত pew-pew-pewপ্রযুক্তির মাধ্যমে কাজ করে :)
MonkeyZeus

5
একইসাথে প্রায় কয়েকশ বা হাজার হাজার বুলেট উড়ছে না। এমন কোনও বন্দুক নেই যা তাদের দ্রুত চালায়। এমনকি শক্তিশালী ফলানक्स প্রতি সেকেন্ডে 75 টি বুলেটে শীর্ষে রয়েছে। উইকিপিডিয়ায় তালিকাভুক্ত "কার্যকর ফায়ারিং রেঞ্জ" এর উপর ভিত্তি করে বুলেটগুলি সর্বাধিক 3 সেকেন্ডের জন্য উড়ে যায়, তাই কোনও ফলানেক্স এক সময় 225 গুলি বাতাসে ফেলে দিতে পারে। একটি এম 16 ​​প্রায় 12 রাউন্ড / সেকেন্ডে শীর্ষে থাকে এবং এই হারটি বজায় রাখতে পারে না (টেকসই আগুনের সর্বাধিক 0.25 ভিত্তিক / সেকেন্ড হয়)। এখানে কেবল একসাথে অনেক গুলির গুলি ছোঁড়া নয়!
আম্মন কর্ট

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

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

উত্তর:


78

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

  1. এগুলি সাধারণত ভলিউম সহ কিছু না করে একক পয়েন্ট হিসাবে সিমুলেটেড হয়। এটি সংঘর্ষ সনাক্তকরণকে উল্লেখযোগ্যভাবে সহজ করে তোলে, কারণ এখন কেবলমাত্র খুব সরল পৃষ্ঠের সাথে যেমন একটি বৃত্তের বিপরীতে একটি লাইন coll

  2. আমরা জানি যে তারা কীভাবে স্থানান্তরিত হবে, তাই তাদের জন্য সঞ্চয় বা গণনা করার জন্য আমাদের তেমন তথ্য নেই isn't আপনার তালিকাটি যুক্তিসঙ্গতভাবে সঠিক ছিল, আমাদের সাধারণত এর সাথে আরও কয়েকটি জিনিস যুক্ত থাকবে, যেমন বুলেটটি গুলি করেছিল এবং এর ধরণ কী।

  3. যেহেতু সমস্ত প্রক্ষেপণগুলি একই রকম হবে, তাই এগুলি গতিশীলভাবে তৈরি করার সমস্ত ওভারহেড এড়াতে আমরা সেগুলি প্রাক-বরাদ্দ করতে পারি। আমি 1000 প্রজেক্টিলগুলির একটি অ্যারে বরাদ্দ করতে পারি, এবং এখন সেগুলি কেবল একটি সূচক দিয়ে অ্যাক্সেস করা যেতে পারে এবং এগুলি সমস্ত মেমরির ক্রমযুক্ত, তাই তাদের প্রসেসিং দ্রুত হবে।

  4. তাদের একটি নির্দিষ্ট জীবনকাল / ব্যাপ্তি রয়েছে, তাই আমি পুরানো বুলেটগুলি শেষ করতে পারি এবং মেমরিটিকে খুব দ্রুত নতুন বুলেটে পুনর্ব্যবহার করতে পারি।

  5. একবার তারা কিছু আঘাত করলে আমি এগুলিও শেষ করতে পারি, তাই তাদের একটি সীমাবদ্ধ জীবনকাল।

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

  7. এগুলি স্প্রাইট (সাধারণত) বা কম পলি মডেল হিসাবে রেন্ডার করা হয় এবং স্ক্রিনে খুব কম জায়গা নেয়, তাই তারা রেন্ডার করার জন্য দ্রুত।

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


12
আমার অবশ্যই 5 এর সাথে দ্বিমত পোষণ করা উচিত, যা আসলে আধুনিক গেমগুলিতে পুরো জিনিসটিকে জটিল করে তোলে। আগের শ্যুটারগুলিতে এটি গ্রহণযোগ্য ছিল, আজকাল এমনকি সিওডি খেলোয়াড়দের কাঠের দেয়াল দিয়ে গুলি করতে দেয়। 6) এটি কোনও বিরল সমস্যা হলেও কোনও প্রতিযোগিতামূলক সিস্টেমের জন্য অগ্রহণযোগ্য হবে।
এসবস

17
@ এসবস এরপরে পুনরায় মন্তব্য করুন: "একবার তারা কোনও কিছু আঘাত করলে তারা অনুপ্রবেশ করতে পারে না, আমি তাদেরও মেয়াদ শেষ করতে পারি, তাই তাদের একটি সীমাবদ্ধ জীবনকাল have" এবং 6 এর জন্য আপনি চরিত্র অনুসারে সর্বাধিক ফায়ার রেটটি কেপ করে এবং তারপরে দৈর্ঘ্যের একটি অ্যারে রেখে একটি খারাপ পরিস্থিতি পেতে পারেনnum_characters * max_bullets_per_character
র‌্যাচেট ফ্রিক

14
@ এসবস আমার মনে হয় # 6 টি উদাহরণ হিসাবে বেশি। টপ-ডাউন স্পেস গেমস, যেখানে কোনও ধীরে ধীরে চলমান বুলেট কোনও কিছু আঘাত / অদৃশ্য হওয়ার আগে অফ স্ক্রিনের একটি দুর্দান্ত দূরত্ব ভ্রমণ করতে পারে। স্পষ্টতই এটি সিওডি-টাইপ গেমগুলিতে কোনও সমস্যা নয়, যেখানে বুলেটগুলি দ্রুত চলে এবং দ্রুত বিশ্বের সীমানায় পৌঁছে।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

1
বেশিরভাগ গেমস বুলেটগুলি (বাহ্যিক ব্যালিস্টিক্স) মোটেও মডেল করে না। বেশিরভাগ গেমস "হিট-স্ক্যানিং" নামে একটি কৌশল নিযুক্ত করে।
অ্যারন

45

সম্ভবত বুলেট প্রয়োগের সবচেয়ে কার্যকর উপায়গুলির মধ্যে একটি হিটস্ক্যান হিসাবে পরিচিত যা ব্যবহার করে । এটি প্রয়োগের ক্ষেত্রে বরং সহজ - যখন আপনি গুলি চালান, তখন আপনি বন্দুকটি কী লক্ষ্য করছে তা পরীক্ষা করে দেখুন (সম্ভবত নিকটতম সত্তা / বস্তু / জাল খুঁজতে কোনও রশ্মি ব্যবহার করছেন) এবং তারপরে আপনি এটি 'আঘাত' করছেন, ক্ষতি করছেন। আপনি যদি এটিকে আরও বাস্তবের মতো দ্রুত চলমান অদৃশ্য বুলেট চালিত করতে চান তবে ক্ষতি করার আগে দূরত্বের উপর নির্ভর করে কিছুটা বিলম্ব যোগ করে আপনি এটি জাল করতে পারেন।

এই পদ্ধতির প্রাথমিকভাবে ধরে নেওয়া হয় যে বহিস্কার প্রজেক্টটিলে সীমাহীন বেগ রয়েছে এবং এটি সাধারণত লেজার এবং কণার বিম / কামান এবং স্নাইপার রাইফেলের কিছু ফর্ম হিসাবে অস্ত্রের ধরণের জন্য ব্যবহৃত হয় ।

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

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

এই পদ্ধতির হিসাবে - হিটস্ক্যান এবং প্রক্ষিপ্ত, উভয়ই 2 ডি বা 3 ডি গেমগুলিতে অবাধে ব্যবহার করা যেতে পারে। এটি অস্ত্র কী এবং কীভাবে স্রষ্টা সিদ্ধান্ত নিয়েছেন যে অস্ত্রটি কাজ করবে তা নির্ভর করে।


ডিজাইনের প্যাটার্ন, হিটস্ক্যান এবং কোয়াড / অক্ট্রি সম্পর্কিত তথ্য সত্যই সহায়তা করে। এছাড়াও, তথ্যের জন্য ধন্যবাদ!
এরিক

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

2
এমন কি এমন গেমস রয়েছে যেখানে বুলেটগুলির পদার্থবিজ্ঞান (তবুও তোপের গোলাগুলির বিপরীতে) মহাকর্ষ (বুলেট ড্রপ), বায়ু প্রতিরোধের মতো জিনিসগুলিকে সম্মান করে? (এটি হ'ল বিশেষ গেমস ছাড়াও গেমগুলি যেখানে ফোকাসটি যথার্থ টার্গেট শ্যুটিং বা এর মতো কিছু: এফপিএস, ইত্যাদি) আমি গেমার নই, তবে আমি অবাক হয়েছি যে সেই স্তরের বিশ্বস্ততার প্রয়োজন (এমনকি কখনও কখনও) প্রয়োজন।
ডেভিডবাক

3
@ ডেভিডবাক: এটি সাধারণত খেলোয়াড়ের ইন-গেমের মুখোমুখি এবং গেম জেনার থেকে প্রত্যাশিত বাস্তবতা নির্ভর করে depends আপনি যদি বেশিরভাগ (কেবল?) নিকটবর্তী কোয়ার্টারে লড়াই করে থাকেন, তবে সত্যই, সেই স্তরের বিশ্বস্ততার প্রয়োজন নেই। তবে যদি দীর্ঘ পরিসরের লড়াইয়ের বিকল্প বিদ্যমান থাকে (যেমন স্নিপার বা আরও বেশি আরপিজির মতো সেটিংয়ে তীরন্দাজ), ক্ষেপণাস্ত্রগুলিকে প্রভাবিত মাধ্যাকর্ষণ আজকাল এক ধরণের প্রত্যাশিত। আপনি যদি নিজের রকেট লঞ্চারটিকে উপরের দিকে লক্ষ্য করেন তবে আপনি কি এখনও রকেটটি অবতরণ এবং কোথাও বিস্ফোরণ আশা করবেন, না? তবুও, ট্র্যাজিকোলজরিগুলি সর্বদা আসল পদার্থবিজ্ঞান থেকে গণনা করা হয় না, কেবল একটি আনুমানিক (পারফরম্যান্সের কারণে)
হফমলে

1
@ ডেভিডবাক যুদ্ধক্ষেত্র যেহেতু খারাপ সংস্থা 2 এর বুলেট ড্রপ ছিল। উভয় রাইফেল, পিস্তল, ট্যাঙ্ক শেল, রকেট, সবকিছু। যুদ্ধক্ষেত্র 3 অরিজিনে বিনামূল্যে, আপনি পরীক্ষা করতে পারেন (আইআইআরসি)। অবশ্যই যুদ্ধক্ষেত্র 4 এরও এই 'বৈশিষ্ট্য' রয়েছে। অন্যান্য খেলা যেখানে আপনি এটি দেখতে পাবেন তা হ'ল "স্নাইপার এলিট"। 2 বা 3 নতুন শিরোনাম। পদার্থবিজ্ঞান সেই গেমটিতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
অ্যাপাচি

7

আমি কোনও উপায়েই বিশেষজ্ঞ নই, তবে আপনার প্রশ্নের উত্তর দিতে হ্যাঁ, আপনার উল্লেখ করা অনেকগুলি জিনিসগুলির আপনার প্রয়োজন হবে।

আপনার 2 ডি উদাহরণস্বরূপ, আপনার বুলেটের জন্য অবস্থান এবং বেগ থাকতে পারে। (আপনার বুলেটগুলি কীভাবে কার্যকর করা যায় তার উপর নির্ভর করে আপনার আজীবন বা সর্বোচ্চ দূরত্বের প্রয়োজনও হতে পারে।) এতে সাধারণত 2 (x, y) মান অন্তর্ভুক্ত থাকে। যদি তারা ভাসমান হয়ে থাকে তবে এটি 16 বাইট ছিল। আপনার যদি 100 টি বুলেট থাকে তবে তা কেবল 1600 বাইট বা প্রায় 1.5 কে। আজ কোনও মেশিনে এটি কিছুই নয়।

পরবর্তী, আপনি sprites উল্লেখ। প্রতিটি বুলেট উপস্থাপনের জন্য আপনার কেবলমাত্র একক স্প্রাইটের প্রয়োজন। এর আকারটি আপনি যে বিস্তৃত আঁকছেন তার উপর এবং স্ক্রিনে এটি কতটা বড় হওয়া উচিত তার উপর নির্ভর করবে। এমনকি সঙ্কলিত করুন, বলুন, 256x256 প্রতি চ্যানেলটিতে পুরো ফ্লোট 32 32-বিট, স্প্রাইটের জন্য এটি 1 এমবি। (এবং এটি খুব বড় হবে!) আপনি প্রতিটি বুলেট স্থানে একই স্প্রাইট আঁকবেন, তবে স্প্রাইটের প্রতিটি অনুলিপির জন্য এটি অতিরিক্ত মেমরি গ্রহণ করে না। এটি হিট-এফেক্টের জন্য একই রকম হবে।

আপনি প্রতি 0.01 সেকেন্ডে গুলি চালানোর কথা উল্লেখ করেছেন। এটি আপনার অস্ত্র থেকে প্রতি সেকেন্ডে 100 টি বুলেট হবে। এমনকি একটি ভবিষ্যত অস্ত্রের জন্য যে যথেষ্ট অনেক! মতে এই Wikipedia নিবন্ধটি :

ট্রিগারটি টানলে, যে হারে রাউন্ডগুলি চালিত হয় তা হ'ল চক্রীয় হার। আগুনের সাধারণ চক্রীয় হার হ'ল অ্যাসল্ট রাইফেলগুলির জন্য 600-900 আরপিএম, কিছু ক্ষেত্রে 1,000-1,100 আরপিএম, সাবম্যাচিন বন্দুক এবং মেশিন পিস্তলগুলির জন্য 900-1,200 আরপিএম এবং মেশিনগানের জন্য 600-1,200 আরপিএম। আক্রমণাত্মক হেলিকপ্টার এবং অন্যান্য যুদ্ধযন্ত্রের গাড়িতে চাপানো এম 134 মিনিগানস প্রতি সেকেন্ডে 100 রাউন্ড (6,000 আরপিএম) আগুনের হার অর্জন করতে পারে।

সুতরাং আক্রমণ হারের হার হেলিকপ্টার!

আপনার মতো বিশাল বিশ্বের জন্য আপনি ব্যাটলফিল্ড / কল অফ ডিউটি ​​ইত্যাদিতে উল্লেখ করেছেন, তারা বুলেট অবস্থানের সমস্ত অবস্থান গণনা করতে পারে তবে পদক্ষেপটি যদি খুব দূরে থাকে তবে সেগুলি সমস্তই আঁকতে পারে না। অথবা আপনি কাছে না আসা পর্যন্ত তারা সেগুলি অনুকরণ করতে পারে না। (আমি স্বীকার করতে হবে যে আমি এই অংশে কিছুটা অনুমান করছি কারণ বড় কিছু নিয়ে আমি কাজ করি নি।)


6

এই হাজার হাজার বস্তু তাত্ক্ষণিকভাবে স্থাপন করা, তারপরে ধ্বংস (যখন হিট প্রভাবটি ট্রিগার করা হয়) তখন প্রক্রিয়াজাতকরণের পক্ষে কি শক্ত হবে না? র‌্যাম স্পেস?

আমি মনে করি আপনি কম্পিউটারগুলি কত দ্রুত গতির তা অবমূল্যায়ন করছেন। এই ছিল কখনও কখনও 80s এবং 90s এর সিস্টেমে একটি সমস্যা। এটি আংশিক কারণ বর্তমান স্পেসটি আঘাত না করা পর্যন্ত আসল স্পেস হানাদাররা আপনাকে আর একটি গুলি চালাতে দেবে না। কিছু গেম স্ক্রিনে অনেক বেশি স্প্রিট থাকলে "মন্দা" থেকে ভুগছিল।

আজকাল, যদিও? আপনার কাছে পিক্সেলটিতে কয়েক হাজার ক্রিয়াকলাপের জন্য পর্যাপ্ত প্রক্রিয়াকরণ শক্তি রয়েছে যা টেক্সচারিং এবং লাইটিং করার প্রয়োজন হয়। হাজার হাজার চলন্ত বস্তু নিয়ে কোনও সমস্যা নেই; এটি আপনাকে ধ্বংসাত্মক অঞ্চল (উদাহরণস্বরূপ রেড ফ্যাশন) করতে দেয় যেখানে প্রতিটি খণ্ড অন্যান্য খণ্ডের সাথে সংঘর্ষের প্রক্রিয়াজাত করে এবং ব্যালিস্টিক বক্ররেখার অনুসরণ করে।

আপনাকে অ্যালগোরিদমিকভাবে কিছুটা যত্নবান হওয়া দরকার - আপনার যখন হাজার হাজার বস্তু থাকে তখন আপনি অন্য প্রতিটি বস্তুর বিপরীতে প্রতিটি বস্তুর চেক করার নিষ্পাপ দৃষ্টিভঙ্গি করতে পারবেন না। বুলেটগুলি সাধারণত অন্য বুলেটগুলির সাথে সংঘর্ষের জন্য পরীক্ষা করে না।

সামান্য দিকের উপাখ্যান: নেটওয়াকড ডুমের প্রথম সংস্করণ (90s এর মূল) প্রতিটি বুলেট নিক্ষেপের জন্য নেটওয়ার্কের মাধ্যমে একটি প্যাকেট প্রেরণ করেছে। যখন এক বা একাধিক খেলোয়াড় মেশিনগান পেয়েছেন, এটি সহজেই নেটওয়ার্কটিকে কাটিয়ে উঠতে পারে। 90 এর দশকে লোকেরা আইনত অবৈধভাবে বিশ্ববিদ্যালয় বা কর্ম নেটওয়ার্কে ডুম খেলছিল যা তাদের নেটওয়ার্ক প্রশাসকদের যখন নেটওয়ার্কটি অকেজো হয়ে উঠল তখন তাদের সমস্যায় পড়েছিল of


আমি অবাক হই যে কীভাবে
চেইনসো

1
আইআইআরসি, প্রথম নেটওয়ার্কের ডুমের আসল সমস্যাটি হ'ল এটি প্রতিটি প্যাকেট পরিবর্তে ব্রডকাস্ট প্যাকেট ব্যবহার করে প্রতিটি প্রতিপক্ষের খেলোয়াড়কে আলাদাভাবে প্রেরণ করার প্রয়োজনীয়তা এড়িয়ে যায়। এটি প্রেরিত প্যাকেটের সংখ্যা হ্রাস করেছে, তবে দুর্ভাগ্যক্রমে নেটওয়ার্কটিতে থাকা প্রতিটি মেশিনে যথেষ্ট সিপিইউ বোঝা চাপিয়েছে, গেমটি খেলছে না এমনগুলি সহ।
ক্যাট

1

আমি একজন বিশেষজ্ঞের থেকে অনেক দূরে তবে আমি আমার অতিরিক্ত সময়ে একটি মাল্টিপ্লেয়ার 2 ডি শ্যুটার গেমটিতে কাজ করছি।

আমার পদ্ধতি

ক্লায়েন্ট এবং সার্ভারের মধ্যে বিভিন্ন বুলেট ক্লাস রয়েছে (এমনকি অফলাইন প্লে করার সময়ও একটি সার্ভার উদাহরণ পৃথক প্রক্রিয়াতে শুরু করা হয় এবং 'প্রধান' গেমের সাথে সংযুক্ত থাকে)।

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

পরবর্তী প্রতিটি টিকের জন্য, বুলেটটি সেই স্থানাঙ্কগুলির দ্বারা নিজেকে সরিয়ে নিয়ে যায় এবং পূর্বনির্ধারিত পরিমাণ দ্বারা এর বেস ক্ষতি হ্রাস করে। যদি এই মানটি 1 এর নীচে চলে যায় বা যদি এটি বিশ্বের কোনও দৃ object় বস্তুটিকে আঘাত করে তবে বুলেটের ঘটনাটি মুছে ফেলা হয় এবং টেস্টিং পয়েন্টের সংঘর্ষগুলি 2D তে অবিশ্বাস্যভাবে সস্তা, এমনকি দ্রুততর গুলি চালানো অস্ত্রও কর্মক্ষমতাতে একটি নগণ্য প্রভাব ফেলে।

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

এর অর্থ হ'ল যে বুলেটটি আপনি দেখতে পাচ্ছেন এটি সার্ভারে সম্পূর্ণরূপে সঠিক উপস্থাপনা নয় তবে কোনও প্লেয়ারের কাছে কোনও পার্থক্য খুব কমই লক্ষণীয় হবে এবং নেটওয়ার্ক সুবিধাগুলি কোনও অসঙ্গতি ছাড়িয়ে যায়।

বিভিন্ন পদ্ধতিতে নোট করুন

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

জটিল মডেলগুলির মধ্যে হিটবক্সগুলি থাকতে পারে এমন 3D মডেলের সাথে, একটি সাধারণ বাউন্ডিং বাক্স FIRST এর বিরুদ্ধে সংঘর্ষের পরীক্ষা করা এটি আদর্শ, এবং যদি এটি সফল হয়, তবে আরও 'বিস্তারিত' সংঘর্ষ সনাক্তকরণে যান।


0

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

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