সি # এর মতো পরিচালিত ভাষার সাথে পিসির জন্য গেমগুলি লেখার সময় আপনি কোন সমস্যার মুখোমুখি হয়েছিলেন এবং কীভাবে আপনি সেগুলি সমাধান করেছেন?
সি # এর মতো পরিচালিত ভাষার সাথে পিসির জন্য গেমগুলি লেখার সময় আপনি কোন সমস্যার মুখোমুখি হয়েছিলেন এবং কীভাবে আপনি সেগুলি সমাধান করেছেন?
উত্তর:
আমি জাভা সম্পর্কে অনেক কিছু জানি না, সুতরাং এটি একটি নেট নেটওয়ার্কের দৃষ্টিকোণ থেকে।
এখন পর্যন্ত সবচেয়ে বড়টি হ'ল আবর্জনা। উইন্ডোজগুলিতে। নেট আবর্জনা সংগ্রহকারী দুর্দান্ত কাজ করে এবং আপনি বেশিরভাগ অংশে শিশুটিকে না রেখেই পালিয়ে যেতে পারেন। এক্সবক্স / উইনফোন 7 এ এটি আলাদা বিষয়। আপনি যদি প্রতি কয়েকটি ফ্রেমে স্টল পান তবে আবর্জনা সংগ্রহ আপনার সমস্যার কারণ হতে পারে। এই মুহুর্তে এটি প্রতি 1 এমবি বরাদ্দের পরে ট্রিগার করে।
আবর্জনা মোকাবেলার জন্য এখানে কিছু পরামর্শ He বাস্তবে এগুলির বেশিরভাগ সম্পর্কে আপনার চিন্তা করার দরকার নেই, তবে সেগুলি একদিন কার্যকর হতে পারে।
GC.GetTotalMemory()
স্ক্রিনে আঁকুন । এটি আপনাকে আপনার গেমের কতগুলি বরাদ্দ করা বাইট দেয় তার একটি আনুমানিক পরিমাণ দেয়। যদি এটি খুব কমই চলে, আপনি ঠিকঠাক করছেন। যদি এটি দ্রুত চলে যায় তবে আপনার সমস্যা আছে।GC.Collect()
প্রতিটি ফ্রেম কল করবেন না । আপনার আবর্জনা এবং এই সমস্ত কিছুর উপরে রেখে এটি একটি ভাল ধারণা বলে মনে হতে পারে, তবে আবর্জনা সংগ্রহের চেয়ে জঞ্জাল সংগ্রহের চেয়ে খারাপ বিষয় কেবল মনে রাখবেন।StringBuilder
(সাবধান, StringBuilder
একটি যাদুর বুলেট নয়, এবং এখনও বরাদ্দের কারণ হতে পারে! এর অর্থ একটি স্ট্রিংয়ের শেষে একটি সংখ্যার যোগ করার মতো সাধারণ ক্রিয়াকলাপগুলি বিস্ময়কর পরিমাণে আবর্জনা তৈরি করতে পারে) বা ইন্টারফেস foreach
ব্যবহার করে এমন সংগ্রহগুলির উপরে লুপগুলি ব্যবহার করা IEnumerable
আপনাকে জেনেও আবর্জনা তৈরি করতে পারে (উদাহরণস্বরূপ, foreach (EffectPass pass in effect.CurrentTechnique.Passes)
একটি সাধারণ)IDisposable
অব্যবহৃত সংস্থান আছে এমন ক্লাসে ব্যবহার করতে ভুলবেন না । আপনি এগুলি মেমরি পরিষ্কার করতে ব্যবহার করতে পারেন জিসি নিজেকে মুক্ত করতে পারে না।অন্য জিনিসটি ভেবে ভাসমান পয়েন্টের পারফরম্যান্স। .NET JITer প্রসেসর-নির্দিষ্ট অপ্টিমাইজেশনের একটি মোটামুটি পরিমাণ কাজ করে, এটি আপনার ভাসমান পয়েন্ট গণিতের গতি বাড়ানোর জন্য এসএসই বা অন্য কোনও সিমডি নির্দেশিকা সেট ব্যবহার করতে পারে না। এটি গেমসের জন্য সি ++ এবং সি # এর মধ্যে বেশ বড় গতির পার্থক্য দেখা দিতে পারে। যদি আপনি মনো ব্যবহার করেন তবে তাদের কিছু বিশেষ সিমডি গণিতের গ্রন্থাগার রয়েছে যা আপনি নিতে পারেন।
একটি টিপিকাল পারফরম্যান্সের ক্ষতি গেমটির নকশা / বিকাশে আবর্জনা সংগ্রহকারীকে বিবেচনা করছে না। অত্যধিক আবর্জনা উত্পাদনের ফলে গেমটিতে "হিক্কার" সৃষ্টি হতে পারে, যা যখন জিসি যথেষ্ট দীর্ঘ সময় ধরে চালায় তখন ঘটে।
সি # এর জন্য, মান অবজেক্ট এবং "ব্যবহার" স্টেটমেন্ট ব্যবহার করা জিসি থেকে চাপকে হ্রাস করতে পারে।
using
বিবৃতি গার্বেজ কালেকশন সঙ্গে কিছুই করার আছে! এটি IDisposable
অবজেক্টগুলির জন্য - যা নিয়ন্ত্রণহীন সংস্থানগুলি মুক্ত করার জন্য (যেমন: যা আবর্জনা সংগ্রহকারী দ্বারা পরিচালিত হয় না )।
আমি বলব যে আমি সি # তে গেম লেখার ক্ষেত্রে সবচেয়ে বড় সমস্যাটি ছিল শালীন গ্রন্থাগারের অভাব। বেশিরভাগ আমি খুঁজে পেয়েছি হয় হয় সরাসরি বন্দর, তবে অসম্পূর্ণ, বা একটি সি ++ লাইব্রেরির মোড়ক যা মার্শালিংয়ের জন্য ভারী পারফরম্যান্স জরিমানা বহন করে। (আমি ওজিআর লাইব্রেরির জন্য মোগ্রে এবং অ্যাক্সিয়াম এবং বুলেট ফিজিক্স লাইব্রেরির বুলেটশার্প সম্পর্কে বিশেষভাবে বলছি)
পরিচালিত ভাষাগুলি (ব্যাখ্যা করা থেকে পৃথক - জাভা বা সি # উভয়ই আর প্রকৃত ব্যাখ্যা করা যায় না) স্থানীয় ভাষাগুলির মতোই দ্রুততর হতে পারে যদি আপনার আসলে কী ধীর করে দেয় (মার্শালিং, আবর্জনা সংগ্রহ) সম্পর্কে ভাল ধারণা থাকে তবে। আমার মনে হয় আসল সমস্যাটি হ'ল গ্রন্থাগার বিকাশকারীরা এখনও তা বুঝতে পারেন নি।
অন্যরা যেমন বলেছেন, জিসি সংগ্রহ বিরতি সবচেয়ে বড় সমস্যা। অবজেক্ট পুল ব্যবহার করা একটি সাধারণ সমাধান।
সি # এবং জাভা ব্যাখ্যা করা হয় না। তারা একটি অন্তর্বর্তী বাইটকোড যা পরে কম্পাইল করছি জে আই টি JIT রূপান্তরিত হবে শুধু হিসাবে দ্রুত নেটিভ কোড (অথবা যথেষ্ট কাছাকাছি তুচ্ছ হতে) হিসেবে
আমি যে সর্বাধিক ক্ষতি পেয়েছি তা হ'ল সম্পদ হ'ল যা ব্যবহারকারীর অভিজ্ঞতাকে সরাসরি প্রভাবিত করে। এই ভাষাগুলি স্বয়ংক্রিয়ভাবে সি ++ এর মতো নিয়ন্ত্রক চূড়ান্তকরণকে সমর্থন করে না, যা আপনি যদি আশা করেন না যে এটি ধ্বংস হওয়ার পরে আপনি সেই দৃশ্যটি ভাসমান জঞ্জাল জাতীয় জিনিসগুলির দিকে নিয়ে যেতে পারেন। (সি # আইডিস্পোজেবলের মাধ্যমে নির্ধারক চূড়ান্তকরণ সম্পাদন করে , জাভা কী করবে তা আমি নিশ্চিত নই।)
এগুলি ব্যতীত, পরিচালিত ভাষাগুলি গেমসটির creditণ পাওয়ার চেয়ে প্রয়োজনীয় যে ধরণের পারফরম্যান্স পরিচালনা করতে পারে তার চেয়ে অনেক বেশি সক্ষম। ভাল লিখিত পরিচালিত কোডটি খারাপভাবে লেখা নেটিভ কোডের চেয়ে অনেক দ্রুত is
IDisposable
সময়-সমালোচনামূলক এবং নিয়ন্ত্রণহীন সংস্থানসমূহের নির্বিচারে পরিষ্কারের অনুমতি দেয় তবে চূড়ান্তকরণ বা আবর্জনা সংগ্রহকারীকে সরাসরি প্রভাবিত করে না।
জাভা বা সি # উভয়ই ব্যাখ্যা করা হয় না। উভয়ই দেশীয় মেশিন কোডে সংকলিত হয়।
তাদের উভয়ই এবং গেমগুলির সাথে সবচেয়ে বড় সমস্যাটি এমনভাবে কোড করাতে হয় যাতে গেম খেলার সময় তারা কখনই আবর্জনা সংগ্রহ করে না। প্রথম স্থানটিতে সেগুলি ব্যবহারের সুবিধাগুলি প্রায় ছাড়িয়ে যাওয়ার জন্য আপনাকে কতগুলি হুপ করতে হবে ops অ্যাপ্লিকেশন বা সার্ভার প্রোগ্রামিংয়ের জন্য সেই ভাষাটিকে মজাদার করে তোলে এমন বেশিরভাগ বৈশিষ্ট্য গেম প্রোগ্রামিংয়ের জন্য এড়িয়ে চলতে হবে অন্যথায় আপনি গেম খেলার সময় দীর্ঘ বিরতি পাবেন এবং আবর্জনা সংগ্রহ করার সাথে সাথে।
এইগুলির মতো ভাষা (বা এক্সএনএ, টর্কএক্সএক্স ইঞ্জিন ইত্যাদির মতো সরঞ্জামগুলি ব্যবহার করে) গেম তৈরি করা থেকে আমি দেখতে পাচ্ছি যে একটি বড় সমস্যাটি হ'ল আপনি কী সমতুল্য গেম তৈরি করতে প্রয়োজনীয় দক্ষতার সাথে ভাল লোকদের একটি দল খুঁজে পেতে খুব চাপ পাবেন? সি ++ এবং ওপেনজিএল / ডাইরেক্টএক্স-এ লোক খুঁজে পাওয়া মোটামুটি সহজ।
গেম ডে ইন্ড ইন্ডাস্ট্রিটি এখনও সি ++ তে খুব ভারী হয়ে আছে কারণ বড় বা সুনির্দিষ্টভাবে ছোট ছোট গেমগুলি ধাক্কা দেওয়ার জন্য ব্যবহৃত বেশিরভাগ সরঞ্জাম এবং পাইপলাইন সি ++ তে লেখা ছিল এবং যতদূর আমি জানি সমস্ত অফিসিয়াল ডেভ কিটস আপনি করতে পারেন এক্সবক্স, পিএস 3, এবং ওয়াইয়ের জন্য পান কেবল সি ++ এর জন্য উপযুক্ততার সাথে মুক্তি পেয়েছে (এক্সবক্স টুলসেট আজকাল আরও পরিচালিত হতে পারে, যে কেউ আরও জানেন?)
আপনি যদি এখনই কনসোলগুলির জন্য গেমগুলি বিকাশ করতে চান তবে আপনি এক্সবক্সে এক্সএনএ এবং সি # পেতে এবং তারপরে কেবল এক্সবক্স লাইভ ইন্ডি গেমস নামে গেমস লাইব্রেরির পাশের অংশে পাবেন। প্রতিযোগিতা ইত্যাদিতে জয়যুক্ত কিছু যারা তাদের গেমটি রিয়েল এক্সবক্স লাইভ আরকেডে নিয়ে যায়। পিসির জন্য একটি গেম তৈরির পরিকল্পনা ছাড়া অন্য।