গেম সত্তাদের ধ্বংস পরিচালনা করার সঠিক উপায়


10

এমন একটি গ্লোব ওয়ার্ল্ডের কল্পনা করুন যেখানে অস্তিত্বের বোঝা এবং লোডগুলি সর্বদা গতিময়ভাবে লোড হয়, আমি সম্ভবত এটি সত্তাগুলির একটি তালিকা হিসাবে উপস্থাপন করবো তবে সেগুলি সরিয়ে দেওয়ার কী?

যুক্ত করার সময় আমি নতুন সত্তাকে পিছনে ঠেলে দিতে পারি, আমার ধারকটির যে কোনও জায়গায় সরিয়ে ফেলতে হবে। অপসারণের জন্য উপাদানটির অবস্থানটি অনুসন্ধান করতে এড়াতে, আমার কী পছন্দ আছে?

আমি চেষ্টা করেছিলাম যে আমি সত্তা আইডিটিকে পাত্রে অবস্থান হিসাবে সরাসরি সংরক্ষণের জন্য একটি পথ তৈরি করে রাখতে পারি, তবে এটি কোনও ধরণের পারস্পরিক নির্ভরতা 'ব্যাধি' সৃষ্টি করতে পারে না?

আমি জানি সঠিক উপায়ে লিস্ট.-রিমোভ্যাট (যেখানে টু রিমোভ) এর মতো কিছু হবে; তবে কেবলমাত্র সত্তাটি কখন মারা যেতে পারে তা জানে?

বা আমি কি কেবলমাত্র কিছু মিস করছি এবং কোনও তালিকার ধারক কখন জানতে পারে যখন কোনও বস্তুর ধ্বংস হবে এবং তার নিজস্ব আকার হ্রাস পাবে?

উত্তর:


10

আপনার শর্তগুলি এখানে:

  • অন্যান্য অবজেক্টগুলি অপসারণের পরেও আপনার সরানো সত্তার উপর নির্ভরশীল হতে পারে।

  • আপনি কেবল সত্তাটির নিজস্ব অপসারণ নির্দিষ্ট করতে চান।

আপনার দুটোই থাকতে পারে না। কেন? কারণ কোডটি আপনার সত্তার থেকে নিজেকে উচ্চ স্তরের (নীচে উদাহরণগুলি দেখুন) সিদ্ধান্ত নেয় যখন সেই সত্তাটি ব্যবহার করা দরকার। ফলস্বরূপ, কেবলমাত্র একই স্তরের কোডগুলি নির্ধারণ করতে পারে যে আপনার সত্তা অপসারণের জন্য উপযুক্ত কিনা।

যাইহোক , কী ঘটতে পারে তা হ'ল উচ্চ স্তরের কোডটি শুনছে এমন কোনও ইভেন্টের মাধ্যমে গুলি ছড়িয়ে এই সত্তাটি নিজের অপসারণের জন্য অনুরোধ করতে পারে । এরপরে উচ্চতর স্তরটি একটি তালিকায় অপসারণের জন্য এই অনুরোধটি সঞ্চয় করে।


উদাহরণ 1: ইভেন্ট ছাড়াই

আপনি আপনার বিশ্বের সত্তাগুলির মধ্যে সংঘর্ষগুলি পরীক্ষা করছেন। এটি আপনার উচ্চ গেম লুপে সাধারণত উচ্চতরভাবে পরিচালিত হয় যা প্রতিটি সত্তাকে একে অপরের বিরুদ্ধে পরীক্ষা করে। এই উদাহরণে বিশেষভাবে, যখন কোনও সত্তা অন্যের সাথে সংঘর্ষ হয়, কেবলমাত্র সত্তার অভ্যন্তরীণ যুক্তিই এটি নির্ধারণ করতে পারে যে এটি কতটা ক্ষতিগ্রস্থ হয়েছে এবং এটি "মেয়াদোত্তীর্ণ" হয়েছে কিনা। সুতরাং সংঘর্ষের জন্য লজিক প্রবাহটি অনুসরণ করুন যেখানে আপনার বিশ্বে চারটি সত্ত্বা রয়েছে, A, B, C এবং D. A আমাদের সত্তা আমাদের সাথে সম্পর্কিত।

আমরা বি এর সাথে সংঘর্ষের জন্য এটিকে পরীক্ষা করি There এ ক্ষতি করে 50%।

আমরা সি এর সাথে সংঘর্ষের জন্য এটিকে পরীক্ষা করি There এ ক্ষতি করে 50%। যেহেতু ক্ষয়ক্ষতি 0 পর্যন্ত পৌঁছেছে, এ নির্ধারণ করে যে এটি "মারা গেছে"। এটি তালিকা থেকে নিজেকে সরিয়ে দেয়।

ডি এর সাথে সংঘর্ষের জন্য আমরা এটিকে পরীক্ষা করি no এখানে কোনও সংঘর্ষ হত না, তবে আপনি এতদূর কখনও পাবেন না: আপনি একটি রানটাইম ব্যতিক্রম পাবেন কারণ একটি ট্র্যাভেলাল অপারেশনের মাঝে আপনার সত্তা তালিকাটি পরিবর্তন করা হয়েছে।

উদাহরণ 2: ইভেন্ট সহ

আগের মত একই সেটআপ।

আমরা বি এর সাথে সংঘর্ষের জন্য এটিকে পরীক্ষা করি There এ ক্ষতি করে 50%।

আমরা সি এর সাথে সংঘর্ষের জন্য এটিকে পরীক্ষা করি There এ ক্ষতি করে 50%। যেহেতু ক্ষয়ক্ষতি 0 পর্যন্ত পৌঁছেছে, এ নির্ধারণ করে যে এটি "মারা গেছে"। "আমাকে ASAP সরান" বলার জন্য এটি সত্তা পরিচালনা কোডটিতে একটি ইভেন্ট চালিত করে। সত্তা পরিচালনা কোড ইভেন্টের অংশ হিসাবে প্রেরিত সত্তা রেফারেন্সটি দেখায় এবং সরিয়ে ফেলা সত্তাগুলির একটি তালিকায় সেই উল্লেখটি সঞ্চয় করে stores

ডি এর সাথে সংঘর্ষের জন্য আমরা এটিকে চেক করি no এখানে কোনও সংঘর্ষ নেই এবং চেকটি ঠিকঠাক কাজ করে।

এখন, বর্তমান গেম লুপ পুনরাবৃত্তির একেবারে শেষে , সরিয়ে নেওয়া সত্তার তালিকাটি চালান এবং এগুলির প্রত্যেককে আপনার প্রধান সত্ত্বা তালিকা থেকে সরিয়ে দিন।


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

শেষ অবধি, আপনার মুছে ফেলা এবং আপনার যোগ করার তালিকাগুলি উভয়ই ফ্লাশ করতে ভুলবেন না, প্রতিবার যখন আপনি এগুলি আপনার মূল সত্তার তালিকায় সংযোজন / অপসারণ করতে ব্যবহার করেন।

পুনশ্চ. পৃথক অপসারণ করতে আপনার মূল তালিকাটি খুঁজতে ভয় পাবেন না। এটি সত্তা পরিচালনার অংশ এবং পার্সেল, এবং এমনকি বৃহত তালিকাগুলি খুব দ্রুত গতিতে চলেছে - সর্বোপরি, তারা এ জন্য ইঞ্জিনিয়ারড're


0

আপনি অবশ্যই একটি হ্যাশম্যাপ / হ্যাশ টেবিল খুঁজছেন । একটি হ্যাশটেবল এমন মানচিত্র যা নির্দিষ্ট মানের সাথে একটি চাবির সাথে মেলে। কীটি যে কোনও হতে পারে (যেমন সত্তা আইডি)।


0

আমার ধারণা আপনি আপনার জন্য ডিলোকেশনগুলি পরিচালনা করতে স্মার্টপয়েন্টার ধারণাটি ব্যবহার করতে পারেন, সেক্ষেত্রে আপনার কোডের অভ্যন্তরে সমস্ত সত্তার একটি তালিকা রাখার প্রয়োজন হবে না।

কিছু ক্ষেত্রে আপনার গেমের সমস্ত অবজেক্টের পুনরাবৃত্তি করতে আপনার একটি তালিকা প্রয়োজন। এই তালিকাটি কেবলমাত্র একটি লিঙ্কের তালিকা হতে পারে যেখানে এটি থেকে অবজেক্টগুলি সন্নিবেশ করা এবং অপসারণ করা ঠিক ও (1) সময় নিতে পারে।

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

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