আমি কীভাবে কোনও সত্তা সিস্টেমে বৈশিষ্ট্যগুলি প্রয়োগ করব?


31

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

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


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

  • একটি সত্তা একটি সনাক্তকারী হয়। এটির কোনও ডেটা নেই, এটি কোনও বস্তু নয়, এটি একটি সরল আইডি যা সমস্ত সত্ত্বার দৃশ্যের তালিকার একটি সূচককে উপস্থাপন করে (যা আমি আসলে একটি উপাদান ম্যাট্রিক্স হিসাবে প্রয়োগ করার পরিকল্পনা করি)।

  • একটি উপাদান হ'ল ডেটা ধারক, তবে এমন পদ্ধতিগুলির সাথে যা সেই ডেটাতে পরিচালনা করতে পারে। সেরা উদাহরণটি হ'ল একটি Vector2D, বা "অবস্থান" উপাদান। এটি তথ্য রয়েছে: xএবং y, কিন্তু কিছু পদ্ধতি যা ডেটা অল্প সহজ অপারেটিং করুন: add(), normalize(), ইত্যাদি।

  • একটি সিস্টেম এমন একটি জিনিস যা নির্দিষ্ট প্রয়োজনীয়তার সাথে মিলিত সংস্থাগুলির সেটগুলিতে পরিচালনা করতে পারে; সাধারণত সত্তাগুলি পরিচালিত হতে উপাদানগুলির একটি নির্দিষ্ট সেট থাকা প্রয়োজন। সিস্টেমটি হ'ল "লজিক" অংশ, "অ্যালগরিদম" অংশ, উপাদান দ্বারা সরবরাহিত সমস্ত কার্যকারিতা নিখুঁতভাবে সহজ ডেটা পরিচালনার জন্য।


ক্যামেরা

ক্যামেরার একটি Vector2Dঅবস্থানের সম্পত্তি, একটি ঘূর্ণন সম্পত্তি এবং এটি একটি বিন্দুর চারপাশে কেন্দ্রিকরণের জন্য কিছু পদ্ধতি রয়েছে। প্রতিটি ফ্রেম, এটি একটি দৃশ্যের পাশাপাশি একটি উপস্থাপককে খাওয়ানো হয় এবং সমস্ত অবস্থান তার অবস্থান অনুসারে অনুবাদ করা হয়। দৃশ্যটি তখন রেন্ডার করা হয়।

কীভাবে কোনও সত্তা সিস্টেমে আমি এই জাতীয় কোনও উপস্থাপনা করতে পারি? ক্যামেরা কি কোনও সত্তা, উপাদান বা সংমিশ্রণ হবে (আমার উত্তর অনুসারে )?

কণা উত্তোলক

আমার কণা ইমিটারের সাথে আমার যে সমস্যাটি রয়েছে তা হ'ল, আবার কী হওয়া উচিত। আমি নিশ্চিত যে কণাগুলি নিজেরাই সত্তা হওয়া উচিত নয়, কারণ আমি এর মধ্যে 10,000 টিরও বেশি সমর্থন করতে চাই এবং আমি বিশ্বাস করি যে এতগুলি সত্তা তৈরি করা আমার অভিনয়ের উপর একটি ভারী আঘাত হয়ে উঠবে।

কীভাবে কোনও সত্তা সিস্টেমে আমি এই জাতীয় কোনও উপস্থাপনা করতে পারি?

ইনপুট পরিচালক

আমি শেষেরটির সাথে কথা বলতে চাই তা হল কীভাবে ইনপুট পরিচালনা করা উচিত hand ইঞ্জিনটির আমার বর্তমান সংস্করণে, একটি ক্লাস বলা হয় Input। এটি এমন একটি হ্যান্ডলার যা ব্রাউজার ইভেন্টগুলিতে সাবস্ক্রাইব করে, যেমন কী টিপুন এবং মাউস অবস্থানের পরিবর্তনগুলি এবং অভ্যন্তরীণ স্থিতি বজায় রাখে। তারপরে, প্লেয়ার শ্রেণীর একটি react()পদ্ধতি রয়েছে যা একটি ইনপুট অবজেক্টকে আর্গুমেন্ট হিসাবে গ্রহণ করে। এর সুবিধাটি হ'ল ইনপুট অবজেক্টটি .JSON এ সিরিয়ালাইজ করা যেতে পারে এবং তারপরে মসৃণ মাল্টিপ্লেয়ার সিমুলেশনগুলির অনুমতি দিয়ে নেটওয়ার্কে ভাগ করা যায়।

এটি কীভাবে কোনও সত্তা সিস্টেমে অনুবাদ করে?

উত্তর:


26
  • ক্যামেরা: এটিকে একটি উপাদান তৈরি করা বেশ ঝরঝরে হবে। এটি ঠিক একটি ছিলisRenderingশান মত পতাকা এবং গভীরতা পরিসীমা। "দেখার ক্ষেত্র" ছাড়াও (আমার ধারণা আপনি এটি 2D তে স্কেল বলবেন?) এবং একটি আউটপুট অঞ্চল। আউটপুট জোনটি গেম উইন্ডোটির যে অংশটি এই ক্যামেরাটিতে রেন্ডার করা হয়েছে তার অংশটি সংজ্ঞা দিতে পারে। আপনার উল্লেখ করার মতো এটির আলাদা অবস্থান / ঘূর্ণন থাকবে না। আপনি যে সত্তাটির ক্যামেরা উপাদান তৈরি করেছেন তা সেই সত্তার অবস্থান এবং ঘূর্ণন উপাদানগুলি ব্যবহার করবে। তারপরে আপনার কাছে একটি ক্যামেরা সিস্টেম থাকবে যা সত্তা সন্ধান করবে যাতে ক্যামেরা, অবস্থান এবং ঘূর্ণন উপাদান রয়েছে। সিস্টেমটি সেই সত্তাটি গ্রহণ করে এবং পজিশনের নির্দিষ্ট অংশে এটির অবস্থান, ঘূর্ণন, দেখার গভীরতা এবং দেখার ক্ষেত্র থেকে "দেখতে" পারে এমন সমস্ত সত্তা আঁকবে। এটি আপনাকে একাধিক ভিউ পোর্ট, "ক্যারেক্টার ভিউ" উইন্ডোজ, স্থানীয় মাল্টিপ্লেয়ার, অনুকরণের জন্য প্রচুর বিকল্প দেয়,

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

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

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


আর একটি দুর্দান্ত উত্তর! ধন্যবাদ! এখন, আমার একমাত্র সমস্যা হ'ল দ্রুত সত্তাগুলি সংরক্ষণ এবং পুনরুদ্ধার করা, যাতে ব্যবহারকারী আসলে একটি গেম লুপ / ​​যুক্তি বাস্তবায়ন করতে পারে ... আমি নিজেই এটি বের করার চেষ্টা করব তবে জাভাস্ক্রিপ্ট কীভাবে অ্যারে, অবজেক্ট এবং একটি ভাল অনুমান করার জন্য মেমরিতে অপরিজ্ঞাত মানগুলি ... এটি সমস্যা হবে কারণ বিভিন্ন ব্রাউজারগুলি এটিকে ভিন্নভাবে প্রয়োগ করতে পারে।
jcora

এটি আর্কিটেকচারালি বিশুদ্ধ বোধ করে তবে কীভাবে রেন্ডারিং সিস্টেমটি সক্রিয় ক্যামেরাটিকে সমস্ত সত্তার মাধ্যমে পুনরাবৃত্তির সংক্ষিপ্তসার নির্ধারণ করে?
পেস

@ স্পেস আমি যেহেতু সক্রিয় ক্যামেরাটি খুব দ্রুত খুঁজে পেতে চাই, আমি সম্ভবত ক্যামেরা সিস্টেমটিকে সক্রিয় ক্যামেরা থাকা সত্তাগুলির একটি রেফারেন্স রাখার অনুমতি দেব।
MichaelHouse

আপনি একাধিক ক্যামেরা নিয়ন্ত্রণের জন্য যুক্তিটি কোথায় রেখেছেন (দেখুন, ঘোরান, চালনা করুন ইত্যাদি)? আপনি একাধিক ক্যামেরা কীভাবে নিয়ন্ত্রণ করবেন?
প্লাজম্যাসেল

@ প্লাসমেল আপনার যদি একাধিক অবজেক্ট থাকে যা নিয়ন্ত্রণ ভাগ করে দেয় তবে কোন বিষয়টি ইনপুট গ্রহণ করবে তা নির্ধারণ করা আপনার নিয়ন্ত্রণ সিস্টেমের দায়িত্ব হবে be
MichaelHouse

13

এখানে আমি কীভাবে এটি পৌঁছেছি:

ক্যামেরা

আমার ক্যামেরাটি অন্য যেগুলির মতো একটি সত্তা, এতে সংযুক্ত উপাদান রয়েছে:

  1. Transformহয়েছে Translation, Rotationএবং Scaleসম্পত্তি, বেগ ইত্যাদি জন্য অন্যদের ছাড়াও

  2. Pov(দৃষ্টিকোণ) আছে FieldOfView, AspectRatio, Near, Far, এবং অন্য কিছু একটি অভিক্ষেপ ম্যাট্রিক্স উত্পাদন করতে, একটি ছাড়াও প্রয়োজনীয় IsOrthoদৃষ্টিকোণ এবং বানানতত্ত্ব অনুমান মধ্যে স্যুইচ করার জন্য ব্যবহার করা পতাকা। Povএছাড়াও ProjectionMatrixরেন্ডারিং সিস্টেম দ্বারা ব্যবহৃত একটি অলস-লোড সম্পত্তি সরবরাহ করে যা অভ্যন্তরীণভাবে পড়ার জন্য গণনা করা হয়, এবং অন্যান্য বৈশিষ্ট্যগুলির কোনওটি সংশোধন না করা পর্যন্ত ক্যাশে করা হয়।

কোনও ডেডিকেটেড ক্যামেরা সিস্টেম নেই। রেন্ডার সিস্টেমের একটি তালিকা বজায় রাখে Povএবং রেন্ডারিংয়ের সময় কোনটি ব্যবহার করা উচিত তা নির্ধারণের জন্য যুক্তি যুক্ত থাকে।

ইনপুট

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

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

জাহাজের InputReceiverউপাদান (সি #) এর সাথে সংযুক্ত হয়ে যাওয়া ফ্রেমের মধ্যে রাখা কীগুলি পরিচালনা করতে ইভেন্ট হ্যান্ডলারটি এখানে রয়েছে :

  void ship_input_Hold(object sender, InputEventArgs args)
    {
        var k = args.Keys;
        var e = args.Entity;

        var dt = (float)args.GameTime.ElapsedGameTime.TotalSeconds;

        var verlet = e.As<VerletMotion>();
        var transform = e.As<Transform>();

        if (verlet != null)
        {

        /// calculate applied force 
            var force = Vector3.Zero;
            var forward = transform.RotationMatrix.Up * Settings.ShipSpeedMax;

            if (k.Contains(Keys.W))
                force += forward;

            if (k.Contains(Keys.S))
                force -= forward;

            verlet.Force += force * dt;
        }

        if (transform != null)
        {
            var theta = Vector3.Zero;

            if (k.Contains(Keys.A))
                theta.Z += Settings.TurnRate;

            if (k.Contains(Keys.D))
                theta.Z -= Settings.TurnRate;

            transform.Rotation += theta * dt;
        }

        if (k.Contains(Keys.Space))
        {
            var time = (float)args.GameTime.TotalGameTime.TotalSeconds - _rapidFireLast;

            if (time >= _rapidFireDelay)
            {
                Fire();
                _rapidFireLast = (float)args.GameTime.TotalGameTime.TotalSeconds;
            }
        }
    }

যদি আপনার ক্যামেরাটি মোবাইল হয় তবে এটিকে তার নিজস্ব InputReceiverএবং Transformউপাদান দিন, একটি ল্যাম্বডা বা হ্যান্ডলার সংযুক্ত করুন যা আপনার পছন্দসই নিয়ন্ত্রণের জন্য প্রয়োগ করে এবং আপনি শেষ করেছেন।

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

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

কণা

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

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

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

এই পদ্ধতির একটি দুর্দান্ত জিনিস হ'ল আপনার পক্ষে কণার জন্য সংঘর্ষ, কুলিং ইত্যাদির জন্য বিশেষ কোনও মামলা থাকতে হবে না; আপনার কোড লেখার কোডটি অন্য প্রতিটি ধরণের সত্তার জন্য এখনও ব্যবহার করা যেতে পারে।

উপসংহার

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

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


আপনি একাধিক ক্যামেরা নিয়ন্ত্রণের জন্য যুক্তিটি কোথায় রেখেছেন (দেখুন, ঘোরান, চালনা করুন ইত্যাদি)?
প্লাজম্যাসেল

7

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

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

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


4

ক্যামেরা কি কোনও সত্তা বা কেবল কোনও উপাদান হতে পারে?

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

আমি নিশ্চিত যে কণাগুলি তাদের সত্তা হওয়া উচিত নয় pretty

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

ইনপুট হিসাবে: ইনপুট গেম জগতে যেমন বিদ্যমান না যে কোনও সিস্টেম দ্বারা পরিচালিত হয় doesn't অগত্যা একটি 'উপাদান উপাদান' নয় কারণ আপনার গেমের সমস্ত কিছুই উপাদানগুলির চারপাশে ঘোরাঘুরি করছে না। তবে একটি ইনপুট সিস্টেম থাকবে। আপনি সেই সত্তাটিকে চিহ্নিত করতে চাইতে পারেন যা কোনওরকম খেলোয়াড় উপাদানটির সাথে ইনপুটকে প্রতিক্রিয়া জানায় তবে ইনপুটটি জটিল এবং সম্পূর্ণ গেম-নির্দিষ্ট হতে চলেছে তাই এর জন্য উপাদানগুলি তৈরি করার চেষ্টা করার সামান্য বিন্দু নেই।


1

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

ক্যামেরা :

একটি "ক্যামেরা" উপাদান রয়েছে, যা কোনও সত্তায় যুক্ত করা যেতে পারে। এই উপাদানটিতে আমার কী ডেটা রাখা উচিত তা আমি সত্যিই বুঝতে পারি না, যদিও: আমার পৃথক "অবস্থান" এবং "আবর্তন" উপাদান থাকতে পারে! followকারণ ইতিমধ্যেই সত্তা এটি সংযুক্ত করা হয় নিম্নলিখিত এর পদ্ধতি, বাস্তবায়িত করা প্রয়োজন নেই এবং আমি এটি চারপাশে সরানো মুক্ত। এই সিস্টেমে সমস্যাটি হ'ল বিভিন্ন ক্যামেরার অবজেক্ট: কী RendererSystemকী ব্যবহার করবেন তা কীভাবে জানতে পারবেন ? এবং এছাড়াও, আমি কেবল ক্যামেরা অবজেক্টটি প্রায় পাস করতাম, তবে এখন মনে হচ্ছে RendererSystemসমস্ত সত্ত্বার উপর দিয়ে দু'বার পুনরাবৃত্তি করা দরকার: প্রথমত ক্যামেরার মতো অভিনয় করা সন্ধান করা, এবং দ্বিতীয়ত, সমস্ত কিছু রেন্ডার করতে।

পার্টিকেলমিটার :

এমন একটি থাকবে ParticleSystemযা "ইমিটার" উপাদানযুক্ত সমস্ত সত্তাকে আপডেট করবে। কণাগুলি সেই উপাদানটির অভ্যন্তরে আপেক্ষিক স্থানাঙ্কস্থ জায়গায় বোবা বস্তু। এখানে রেন্ডারিংয়ের একটি সমস্যা রয়েছে: আমাকে হয় একটি ParticleRendererসিস্টেম তৈরি করা বা বিদ্যমানটির কার্যকারিতা বাড়ানো দরকার।

ইনপুট সিস্টেম :

এখানে আমার জন্য প্রধান উদ্বেগ ছিল যুক্তি বা react()পদ্ধতি। আমি যে সমাধানটি নিয়ে এসেছি তা হল এর জন্য একটি পৃথক সিস্টেম এবং প্রতিটি সিস্টেমের জন্য একটি উপাদান, এটি বোঝাতে পারে কোনটি ব্যবহার করা উচিত। এটি সত্যিই খুব হ্যাকি মনে হচ্ছে এবং কীভাবে এটি পরিচালনা করতে হয় তা আমি জানি না। একটি জিনিস হ'ল, যতক্ষণ না আমি উদ্বিগ্ন, Inputক্লাস হিসাবে প্রয়োগ করা যায়, তবে আমি কীভাবে বাকি খেলায় এটি সংহত করতে পারি তা আমি দেখতে পাচ্ছি না।


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

@ মেলাক 47 that's, এটি সত্য, আমি এটি সম্পর্কেও ভেবেছিলাম, তবে আমি আরেমিস যেভাবে এটি সম্পাদন করেছিলাম তা বাস্তবায়ন করতে চেয়েছিলাম। তবে এই "সিস্টেমগুলি সম্পর্কিত সংস্থাগুলির জন্য রেফারেন্স" আরও বেশি ত্রুটিযুক্ত বলে মনে হচ্ছে ...
jcora

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