কঠিনের মধ্যে এটি একটি। আমি আমার বিশেষ অভিজ্ঞতার উপর ভিত্তি করে কিছু প্রশ্নের সমাধান করার চেষ্টা করব (ওয়াইএমএমভি):
উপাদানগুলি অবশ্যই অন্যান্য উপাদানগুলির ডেটা অ্যাক্সেস করতে পারে। উদাহরণস্বরূপ, রেন্ডার উপাদানটির অঙ্কন পদ্ধতিতে অবশ্যই রূপান্তর উপাদানটির অবস্থান অ্যাক্সেস করতে হবে। এটি কোডে নির্ভরতা তৈরি করে।
সংযুক্তি / নির্ভরতার পরিমাণ এবং জটিলতা (ডিগ্রি নয়) এটিকে অবমূল্যায়ন করবেন না। আপনি এটির মধ্যে পার্থক্যটির দিকে তাকিয়ে থাকতে পারেন (এবং এই চিত্রটি ইতিমধ্যে হাস্যকরভাবে খেলনা-জাতীয় স্তরে সরল করা হয়েছে, এবং বাস্তব-বিশ্বের উদাহরণটি মিলনকে আলগা করার জন্য ইন্টারফেস রাখবে):
... এবং এই:
... অথবা এটা:
উপাদানগুলি বহুবিধ হতে পারে যা আরও কিছু জটিলতার পরিচয় দেয়। যেমন একটি স্প্রাইট রেন্ডার উপাদান থাকতে পারে যা রেন্ডার উপাদানটির ভার্চুয়াল ড্র পদ্ধতিতে ওভাররাইড করে।
তাই? একটি ভেটেবল এবং ভার্চুয়াল প্রেরণের সমতুল্য অ্যানালগালিকাল (বা আক্ষরিক) এর অবজেক্টের তার অন্তর্নিহিত অবস্থা / ডেটা লুকিয়ে রাখার পরিবর্তে সিস্টেমের মাধ্যমে আহ্বান করা যেতে পারে। পলিমারফিজম এখনও বিশুদ্ধ "ইসিএস প্রয়োগকরণের সাথে কার্যকর হয় যখন অ্যানালগালিক্যাল ভিটিবেল বা ফাংশন পয়েন্টার (গুলি) সিস্টেমকে অনুরোধ করার জন্য প্রকারের" ডেটা "রূপান্তরিত করে।
যেহেতু পলিমারফিক আচরণ (যেমন রেন্ডারিংয়ের জন্য) কোথাও প্রয়োগ করতে হয়, এটি কেবল সিস্টেমে আউটসোর্স করা হয়। (যেমন স্প্রাইট রেন্ডার সিস্টেম একটি স্প্রাইট রেন্ডার নোড তৈরি করে যা রেন্ডার নোডকে উত্তরাধিকার সূত্রে প্রাপ্ত করে এবং এটি রেন্ডার ইঞ্জিনে যুক্ত করে)
তাই? আমি আশা করি এটি কটূক্তি হিসাবে প্রকাশ পাচ্ছে না (আমার অভিপ্রায় নয় যদিও আমি প্রায়শই এটির বিরুদ্ধে অভিযুক্ত হয়েছি তবে আমি ইচ্ছা করি পাঠ্যের মাধ্যমে আবেগকে আরও ভালভাবে জানাতে পারি), তবে এই ক্ষেত্রে "আউটসোর্সিং" পলিমারফিক আচরণ অতিরিক্তভাবে ব্যয় করে না উত্পাদনশীলতা ব্যয়।
সিস্টেমগুলির মধ্যে যোগাযোগ এড়ানো কঠিন। উদাহরণস্বরূপ, সংঘর্ষের সিস্টেমটির জন্য বাউন্ডিং বক্সের প্রয়োজন হতে পারে যা কংক্রিটের যে কোনও রেন্ডার উপাদান রয়েছে তা থেকে গণনা করা হয়।
এই উদাহরণটি আমার কাছে বিশেষভাবে অদ্ভুত বলে মনে হচ্ছে। আমি জানি না কেন কোনও উপস্থাপক ঘটনাস্থলে ফিরে ডেটা আউটপুট তুলবেন (আমি সাধারণত এই প্রসঙ্গে রেন্ডারারকে কেবলমাত্র পঠনযোগ্য হিসাবে বিবেচনা করি), বা কোনও রেন্ডারারের জন্য রেন্ডারার এবং এটি উভয়ের জন্য এটি করার জন্য অন্য কোনও সিস্টেমের পরিবর্তে এএবিবিগুলি সন্ধান করা হবে I সংঘর্ষ / পদার্থবিজ্ঞান (আমি সম্ভবত "রেন্ডার উপাদান" নামটি পেতে পারি)। তবুও আমি এই উদাহরণটির সাথে খুব বেশি ঝুলতে চাই না কারণ যেহেতু আমি বুঝতে পারি যে এটি আপনি যে পয়েন্টটি করার চেষ্টা করছেন তা নয়। তবুও সিস্টেমগুলির মধ্যে যোগাযোগ (এমনকি অন্যের তৈরি পরিবর্তনের উপর ভিত্তি করে সরাসরি সিস্টেমগুলির সাথে কেন্দ্রীয় ইসি ডাটাবেসে পঠন / লেখার অপ্রত্যক্ষ আকারেও) প্রয়োজন হয় না তবে ঘন ঘন হওয়া উচিত নয়। যে '
যদি সিস্টেমের আপডেট ফাংশনগুলিকে কল করার ক্রমটি সংজ্ঞায়িত না করা হয় তবে এটি প্রবেলেস হতে পারে।
এটি একেবারে সংজ্ঞায়িত করা উচিত। ইসিএস কোডবেজে প্রতিটি সম্ভাব্য সিস্টেমের সিস্টেম প্রসেসিং মূল্যায়ন ক্রমটিকে পুনরায় সাজানোর এবং ফ্রেম এবং এফপিএসের সাথে লেনদেনকারী শেষ ব্যবহারকারীটির কাছে ঠিক একই ধরণের ফলাফল ফিরে পাওয়ার শেষ সমাধান নয়। ইসিএস ডিজাইন করার সময় এটির মধ্যে একটি বিষয়, আমি কমপক্ষে দৃ strongly়তার সাথে কিছুটা আগেই প্রত্যাশা করা উচিত (যদিও পরে অনেকগুলি ক্ষমা করার শ্বাসকষ্টের পরে মন পরিবর্তন করতে পারে তবে শর্ত হয় যে এটি ক্রমের ক্রমটির সবচেয়ে গুরুত্বপূর্ণ দিকগুলি পরিবর্তন করছে না) সিস্টেম প্রার্থনা / মূল্যায়ন)।
তবে প্রতিটি ফ্রেমের পুরো টাইলম্যাপটি পুনরায় গণনা ব্যয়বহুল। সুতরাং, সিস্টেমে সেগুলি আপডেট করার পরে ঘটে যাওয়া সমস্ত পরিবর্তনের উপর নজর রাখতে একটি তালিকা প্রয়োজন needed ওওপি পদ্ধতিতে এটি টাইল মানচিত্রের উপাদান দ্বারা আবশ্যক। যেমন সেটটাইল () পদ্ধতিটি যখনই ডাকা হবে তখন ভার্টেক্স অ্যারে আপডেট করবে।
এটি ডেটা-ভিত্তিক উদ্বেগ বাদে আমি এটিকে বেশ বুঝতে পারি নি। মেমোইজেশন সহ কোনও ইসিএসে ডেটা উপস্থাপন ও সংরক্ষণ করার মতো কোনও সমস্যা নেই, যেমন পারফরম্যান্সের ক্ষতিগুলি এড়াতে (ইসিএসের সাথে সবচেয়ে বড়গুলি সিস্টেমের সাথে নির্দিষ্ট উপাদানগুলির উপলব্ধ উদাহরণগুলির জন্য অনুসন্ধানের মতো বিষয়গুলির সাথে সম্পর্কিত থাকে যা একটি অন্যতম জেনারেলাইজড ইসিএসের অনুকূলকরণের সবচেয়ে চ্যালেঞ্জিং দিক)। যুক্তি এবং ডেটা "খাঁটি" ইসিএসে বিভক্ত হওয়ার অর্থ এই নয় যে আপনাকে হঠাৎ এমন জিনিসগুলি পুনরায় সংশোধন করতে হবে যা আপনি অন্যথায় কোনও ওওপি উপস্থাপনায় ক্যাশে / স্মৃতিচারণ করতে পারেন। এটি খুব গুরুত্বপূর্ণ / অপ্রাসঙ্গিক বিন্দু যদি না আমি খুব গুরুত্বপূর্ণ কিছু থেকে সন্ধান না করি।
"খাঁটি" ইসিএসের সাহায্যে আপনি টাইল মানচিত্রের উপাদানটিতে এই ডেটা সংরক্ষণ করতে পারেন। একমাত্র প্রধান পার্থক্য হ'ল এই ভার্টেক্স অ্যারের আপডেট করার যুক্তিটি কোথাও কোনও সিস্টেমে চলে যাবে।
এমনকি আপনি যদি পৃথক উপাদান তৈরি করেন তবে সত্তা থেকে এই ক্যাশেটিকে অবৈধকরণ এবং সরানো সহজ করার জন্য আপনি ইসিএসের উপর ঝুঁকতে পারেন TileMapCache
। এই মুহুর্তে যখন ক্যাশেটি পছন্দসই হয় তবে কোনও TileMap
উপাদান সহ কোনও সত্তায় পাওয়া যায় না , আপনি এটি গণনা করে এটি যুক্ত করতে পারেন। যখন এটি অবৈধ করা হয় বা আর প্রয়োজন হয় না, আপনি ইসিএসের মাধ্যমে বিশেষত এ জাতীয় অবৈধকরণ এবং অপসারণের জন্য বিশেষভাবে আরও কোড না লিখে এটি সরিয়ে ফেলতে পারেন।
সিস্টেমগুলির মধ্যে লুকিয়ে থাকা থাকা সত্ত্বেও উপাদানগুলির মধ্যে নির্ভরতা এখনও বিদ্যমান
"খাঁটি" প্রতিনিধির উপাদানগুলির মধ্যে কোনও নির্ভরতা নেই (সিস্টেমগুলির দ্বারা এখানে নির্ভরতাগুলি লুকানো হচ্ছে বলে আমি একেবারেই সঠিক মনে করি না)। ডেটা ডেটা উপর নির্ভর করে না, তাই কথা বলতে। যুক্তি যুক্তি উপর নির্ভর করে। এবং একটি "খাঁটি" ইসিএস যুক্তিটিকে এমনভাবে লেখার জন্য উত্সাহিত করে যাতে ডেটা এবং লজিকের সর্বনিম্ন ন্যূনতম উপসেটের উপর নির্ভর করে (প্রায়শই কিছুই হয় না) কোনও সিস্টেমকে কাজ করার প্রয়োজন হয় যা অনেকগুলি বিকল্পের বিপরীতে থাকে যা প্রায়শই নির্ভর করে উত্সাহিত করে প্রকৃত কাজের জন্য প্রয়োজনের চেয়ে অনেক বেশি কার্যকারিতা। আপনি যদি খাঁটি ইসিএসটি সঠিকভাবে ব্যবহার করে থাকেন তবে আপনার প্রথমে যে জিনিসগুলির প্রশংসা করা উচিত তা হ'ল ডুপ্পলিং সুবিধাগুলি এবং একই সাথে এনওপ্যাসুলেশন এবং বিশেষত তথ্য গোপনের বিষয়ে ওওপি-তে প্রশংসা করতে শিখেছে এমন সমস্ত কিছু নিয়ে প্রশ্ন করা।
ডিকোপলিংয়ের মাধ্যমে আমি স্পষ্টভাবে বলতে চাইছি যে আপনার সিস্টেমে কতটা কম তথ্য কাজ করতে হবে। আপনার গতিব্যবস্থাকে এমনকি আরও জটিল কিছু Particle
বা এমনকি Character
( যেমন সিস্টেমের বিকাশকারী এমনকি এমনকি সিস্টেমের মধ্যে যেমন সত্ত্বা ধারণা বিদ্যমান প্রয়োজন জানা প্রয়োজন না) এর মতো আরও কিছু জানতে হবে না । এটি কেবল পজিশন উপাদানগুলির মতো খালি ন্যূনতম ডেটা সম্পর্কে জানতে হবে যা স্ট্রাক্টে কয়েক ভাসমানের মতো সহজ হতে পারে। খাঁটি ইন্টারফেসের মতো IMotion
যা চালিয়ে যায় তার চেয়ে এটি আরও কম তথ্য এবং কম বাহ্যিক নির্ভরতা । এটি মূলত এই ন্যূনতম জ্ঞানের কারণে যে প্রতিটি সিস্টেমে কাজ করা প্রয়োজন যা ইসিসি প্রায়শই এত ক্ষমা করে দেয় যে সমস্ত স্থান জুড়ে ক্যাসকেডিং ইন্টারফেসের বিরতিগুলির মুখোমুখি না হয়ে অন্ধকারে খুব অপ্রত্যাশিত নকশা পরিবর্তনগুলি পরিচালনা করতে পারে।
আপনি যে "অপরিষ্কার" পদ্ধতির পরামর্শ দিচ্ছেন সে সুবিধাটি কিছুটা হ্রাস পাবে কারণ এখন থেকে আপনার যুক্তিগুলি এমন সিস্টেমে কঠোরভাবে স্থানীয় হয় না যেখানে পরিবর্তনগুলি ক্যাসকেডিং ভাঙ্গন সৃষ্টি করে না। যুক্তিটি এখন একাধিক সিস্টেম দ্বারা অ্যাক্সেসিত উপাদানগুলিতে কিছুটা ডিগ্রীতে কেন্দ্রীভূত হবে যা এখন এটি ব্যবহার করতে পারে এমন সমস্ত সিস্টেমের ইন্টারফেসের প্রয়োজনীয়তাগুলি পূরণ করতে হবে এবং এখন এটি প্রতিটি সিস্টেমের মতোই আরও (নির্ভরশীল) জ্ঞান থাকা দরকার তথ্যের চেয়ে কঠোরভাবে সেই উপাদানটির সাথে কাজ করা দরকার।
ডেটা নির্ভরতা
ইসিএস সম্পর্কে বিতর্কিত একটি বিষয় হ'ল এটি কেবলমাত্র কাঁচা ডেটার সাথে বিমূর্ত ইন্টারফেসের নির্ভরতা হতে পারে তা প্রতিস্থাপনের ঝোঁক, এবং এটি সাধারণত সংযোজনের একটি কম কাঙ্ক্ষিত এবং শক্ত রূপ হিসাবে বিবেচিত হয়। তবে গেমের মতো ধরণের ডোমেনগুলিতে যেখানে ইসিএস খুব উপকারী হতে পারে, প্রায়শই ডেটা উপস্থাপনাকে সামনে রেখে ডিজাইন করা সহজ এবং সিস্টেমের কিছু কেন্দ্রীয় স্তরে সেই ডেটা দিয়ে আপনি কী করতে পারেন তা ডিজাইনের তুলনায় এটিকে স্থিতিশীল রাখা সহজ। এটি এমন কিছু যা আমি কষ্টদায়কভাবে এমনকি কোডবেসে পাকা অভিজ্ঞদের মধ্যে পর্যবেক্ষণ করেছি যা এই জাতীয় জিনিসের সাথে আরও একটি COM- শৈলীর বিশুদ্ধ ইন্টারফেস পদ্ধতির ব্যবহার করে IMotion
।
বিকাশকারীরা এই কেন্দ্রীয় ইন্টারফেসে ফাংশনগুলি যুক্ত করতে, অপসারণ করতে বা পরিবর্তন করার কারণ অনুসন্ধান IMotion
করে চলেছে এবং প্রতিটি পরিবর্তন অত্যন্ত মারাত্মক এবং ব্যয়বহুল ছিল কারণ এটি ব্যবহৃত ব্যবস্থায় যেহেতু প্রতিটি স্থান বরাবর কার্যকর হয়েছিল তা ভেঙে ফেলবে IMotion
। এদিকে পুরো সময়টি এতটা বেদনাদায়ক এবং ক্যাসকেডিং পরিবর্তন সহ পুরোপুরি কার্যকর হওয়া বস্তুগুলি IMotion
কেবলমাত্র 4x4 ম্যাট্রিক্সের ফ্লোট সংরক্ষণ করে এবং পুরো ইন্টারফেসটি কীভাবে সেই ফ্লোটগুলি রূপান্তর করতে এবং অ্যাক্সেস করা যায় তা নিয়েই উদ্বিগ্ন ছিল; শুরু থেকে সমস্ত উপাত্তের উপস্থাপনা স্থিতিশীল ছিল এবং প্রচুর ব্যথা এড়ানো যেত যদি এই কেন্দ্রীভূত ইন্টারফেসটি, অপ্রত্যাশিত নকশার প্রয়োজনীয়তার সাথে পরিবর্তিত হওয়ার ঝুঁকিপূর্ণ, এমনকি প্রথম স্থানে উপস্থিত না থাকে।
এটি সমস্ত বৈশ্বিক ভেরিয়েবলের মতোই ঘৃণ্য শোনাতে পারে তবে ইসিএস কীভাবে সিস্টেমের মাধ্যমে টাইপ করে সুস্পষ্টভাবে পুনরুদ্ধার করা উপাদানগুলিতে এই ডেটা সংগঠিত করে তার প্রকৃতি এটি তৈরি করে, যখন সংকলকরা তথ্য গোপনের মতো কোনও কিছুই প্রয়োগ করতে পারে না, যে জায়গাগুলি অ্যাক্সেস করে এবং পরিবর্তন করে ate এখনও আক্রমণকারীদের কার্যকরভাবে বজায় রাখতে এবং এক পদ্ধতি থেকে পরবর্তী সিস্টেমে কী ধরণের রূপান্তর এবং পার্শ্ব প্রতিক্রিয়াগুলি চলেছে তা ভবিষ্যদ্বাণী করার জন্য ডেটাগুলি সাধারণত খুব স্পষ্ট এবং সুস্পষ্ট এবং প্রকৃতপক্ষে কিছু নির্দিষ্ট ডোমেনগুলিতে কীভাবে রূপান্তর ও পার্শ্ব প্রতিক্রিয়াগুলি OOP এর চেয়ে সহজ এবং অনুমানযোগ্য হতে পারে সিস্টেমটি একটি ফ্ল্যাট ধরণের পাইপলাইনে পরিণত হয়)।
সবশেষে, আমি কীভাবে খাঁটি ইসিএসে অ্যানিমেশন পরিচালনা করব সে প্রশ্নটি জানতে চাই। বর্তমানে আমি একটি অ্যানিমেশনটিকে একটি ফান্টকার হিসাবে সংজ্ঞায়িত করেছি যা 0 এবং 1 এর মধ্যে কিছু অগ্রগতির ভিত্তিতে একটি সত্তাকে ম্যানিপুলেট করে The তার আপডেট ফাংশনে এটি সত্তায় বর্তমানে অ্যানিমেশনগুলি সক্রিয় রয়েছে তা প্রয়োগ করে।
আমরা সকলেই এখানে ব্যবহারবাদী। এমনকি গেমদেবতে আপনি সম্ভবত বিরোধমূলক ধারণা / উত্তর পাবেন। এমনকি শুদ্ধতম ইসিএস একটি তুলনামূলকভাবে নতুন ঘটনা, অগ্রণী অঞ্চল, যার জন্য লোকেরা কীভাবে ত্বকের বিড়ালগুলি সম্পর্কে দৃ the়তম মতামত তৈরি করে নি। আমার অন্ত্রের প্রতিক্রিয়া একটি অ্যানিমেশন সিস্টেম যা রেন্ডারিং সিস্টেমটি প্রদর্শনের জন্য অ্যানিমেটেড উপাদানগুলিতে এই ধরণের অ্যানিমেশন অগ্রগতি বাড়িয়ে তোলে, তবে এটি নির্দিষ্ট অ্যাপ্লিকেশন এবং প্রসঙ্গের জন্য এতটা উপেক্ষাকে উপেক্ষা করছে।
ইসিএসের সাহায্যে এটি কোনও রূপালী বুলেট নয় এবং আমি এখনও নিজেকে নতুন সিস্টেমগুলিতে প্রবেশ করার প্রবণতা সহ কিছুটা সরিয়ে ফেলতে, নতুন উপাদান যুক্ত করতে, সেই নতুন উপাদানটির ধরন বাছাই করার জন্য একটি বিদ্যমান সিস্টেম পরিবর্তন করার চেষ্টা করি etc. জিনিস ঠিক প্রথমদিকে এখনও প্রায়। তবে আমার ক্ষেত্রে পার্থক্যটি হ'ল আমি যখন কিছু নির্দিষ্ট নকশার সম্মুখভাগের প্রয়োজন অনুমান করতে ব্যর্থ হই তখন আমি কেন্দ্রীয় কিছু পরিবর্তন করি না। আমি ক্যাসকেডিং বিরতিগুলির ছড়িয়ে পড়া প্রভাব ফেলছি না যার জন্য আমাকে সমস্ত জায়গা জুড়ে যেতে হবে এবং ফসলের নতুন কিছু প্রয়োজনের জন্য এত কোড পরিবর্তন করতে হবে, এবং এটি বেশ সময় সাশ্রয়কারী। আমি আমার মস্তিষ্কে এটি আরও সহজ খুঁজে পেয়েছি কারণ যখন আমি একটি নির্দিষ্ট সিস্টেমের সাথে বসে থাকি, তখন এটিতে কাজ করার জন্য প্রাসঙ্গিক উপাদানগুলি (যা কেবলমাত্র ডেটা) ছাড়াও অন্য কোনও কিছু সম্পর্কে জানতে / স্মরণ করার দরকার নেই।