এক্সএনএ সহ গেমস আর্কিটেকচার সম্পর্কিত প্রশ্নসমূহ


12

সুতরাং অবশেষে আমি এক্সএনএর সাথে প্রায় খেলতে পেরেছি এবং 2 ডি গেমটি তৈরির সাথে বেড়াতে যাচ্ছি (আইওএস এ এটি বিকাশকারী কোনও বন্ধুর কাছ থেকে আমার কাছে শিল্প সম্পদ রয়েছে)

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

আমি নীচের কোয়েস্টিনে কোনও স্পষ্টতা বা আরও তথ্যের দিকে নির্দেশিত হওয়ার সত্যই প্রশংসা করব:

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

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

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

এগুলি সত্যই বুঝতে না পেরে আমার বৃহত্তম " WTF " বলে মনে হচ্ছে

উত্তর:


11

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

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

আপনার দ্বিতীয় প্রশ্নের উত্তর দিতে, আমি আপনাকে আমার প্রশ্নের উত্তরটি উল্লেখ করব "গেমের প্রতিটি বিষয়ের জন্য ড্রয়যোগ্য গেম কম্পোনেন্টটি ব্যবহার করার পক্ষে কী কী?" পাশাপাশি গেম আর্কিটেকচার সম্পর্কে আমার চিন্তাভাবনা । সংক্ষিপ্ত উত্তরটি হ'ল: GameComponentওভারটি কেবল নিজের ক্লাস তৈরি করা Drawএবং Updateনিজের মতো পদ্ধতি কল করার কোনও সুবিধা নেই । যদি GameComponentআপনার কাঙ্ক্ষিত আর্কিটেকচারের সাথে হুবহু মিল মেলে তবে তা ব্যবহার করুন - তবে প্রায়শই এটি হয় না।

পরিষেবা এবং উপাদানগুলি ব্যবহার করা কেবলমাত্র আকর্ষণীয় হয়ে যায় যদি আপনি তৃতীয় পক্ষের ব্যবহারের জন্য একটি লাইব্রেরি তৈরি করেন। এক্সএনএ নিজেই এটি করে - এটি রয়েছে IGraphicsDeviceServiceএবং GamerServicesComponentউদাহরণস্বরূপ। এগুলি সুনির্দিষ্ট ডিকোপলিং প্রয়োজনীয়তা পূরণ করে যেগুলি সাধারণত কোনও গেম বিকাশ করার সময় আপনার মুখোমুখি হয় না।

অবশেষে, আপনার তৃতীয় প্রশ্নের উত্তরটি বেশ সহজ: কেবল আপনার গেম সত্ত্বাগুলি তৈরি করুন LoadContent। এখানে বিশেষ কিছু নেই Initialize

এটি উল্লেখ করা মূল্যবান যে পুরো Microsoft.Xna.Framework.Gameসমাবেশটি is চ্ছিক । এটি একটি অত্যন্ত কার্যকর প্রারম্ভিক বিন্দু সরবরাহ করে - তবে এটি কোনও উপায়ে জিনিসগুলি করার জন্য "এক সঠিক উপায়" হিসাবে বিবেচনা করা উচিত নয়।


এটি দেখতে খুব আকর্ষণীয় উপায়। আমার উত্তরের চেয়ে অনেক বেশি বাস্তববাদী এবং পৃথিবীতে নেমে। ভাল +1 প্রাপ্য, স্যার।
জেসি এমন্ড

আমার আরও একটি প্রশ্ন আছে! আপনি যখন টেক্সচার 2 ডি-র জন্য আঁকেন তখন উৎপত্তি সম্পর্কে কী। টেক্সচারের নীচের মাঝখানে মূলটি স্থাপন করা কি সাধারণ? আমি অ্যানিমেশনগুলি করার চেষ্টা করছি, এবং আমি জানতে পারি যে (0,0) এ উত্সটি প্রস্থ এবং উচ্চতা
একরকম

@ শেথেরন: আপনার সত্যিকার অর্থে একটি নতুন প্রশ্ন তৈরি করা উচিত - কারণ এটি মূল প্রশ্নের সাথে অনেকটা সম্পর্কিত নয়। আমি এই প্রশ্নে আপনার সম্পাদনাটি ফিরিয়ে আনতে চলেছি। এর জন্য উত্সটি SpriteBatch.Drawটেক্সচারের পিক্সেল স্থানাঙ্কগুলিতে টেক্সচারের উপরে-বামের সাথে সম্পর্কিত (বা উত্স আয়তক্ষেত্র, যদি আপনি এটি ব্যবহার করেন) নির্দিষ্ট করা হয়।
অ্যান্ড্রু রাসেল

1
@ অ্যান্ড্রু: আমি সম্প্রতি আমার গেমটি রিফ্যাক্ট করেছিলাম যাতে এটি সম্পূর্ণরূপে public/ সংস্থাগুলির পরিবর্তে পরিষেবাগুলির উপর নির্ভর করে static। কেন? Testability। সম্পত্তির পদ্ধতির সাথে জিনিসগুলি সরিয়ে আনা অসম্ভবের কাছাকাছি, যখন IServiceProviderআপনার পরীক্ষার পদ্ধতিতে শ্রেণীর প্রয়োজনীয় কিছু দিয়ে স্টাফ করা যায় এমন কিছু দিয়ে শুরু করা যদি এটি তুচ্ছ । এটি Gameআপনার পরীক্ষায় নিজেই বস্তুটি ইনস্ট্যান্ট করার প্রয়োজনীয়তাও এড়ায় যা খুব দ্রুত অগোছালো হয়ে যায়।
ম্যাথু Scharley

অন্যদিকে, আমার এখনও Gameঅবজেক্টটিতে প্রচুর সর্বজনীন সম্পত্তি রয়েছে । এগুলিকে কেবল ইন্টারফেসের মাধ্যমে অ্যাক্সেস দেওয়া হয় Game.Servicesযা ধাক্কা খায় যা এরপরে আবার কী প্রয়োজন তা পাওয়ার জন্য সমস্ত কিছু ঘুরে যায়।
ম্যাথু Scharley

3

আপনার প্রথম প্রশ্নের জন্য, আমি অবশ্যই স্বীকার করব যে সত্যিকারের উত্তর আমি জানি না। আমার ধারণা এটি একই কারণেই হবে কারণ কেন সিঙ্গলটন সাধারণত খারাপ ডিজাইনের ধরণ। আমি আপনাকে এই লিঙ্কের একটি উদ্ধৃতি উল্লেখ করব :

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

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

আপনার তৃতীয় প্রশ্নের জন্য, হ্যাঁ লোডকন্টেন্ট পদ্ধতিতে আপনার যেকোন প্রকারের সামগ্রী (সম্পদ, ফন্ট, ইত্যাদি) লোড করা উচিত। ইনিশিয়েশন হিসাবে, আপনি সাধারণত ইনিশিয়াল ফাংশনের মধ্যে প্লেয়ার অবজেক্টটি তৈরি করে তার লিডটি লোডকন্টেন্টের মধ্যে লোড করে দিতেন .. বা আপনি যদি চান তবে লোডকন্টেন্টের মধ্যেই এটি করতে পারেন।

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