দুটি পৃথক গ্রাফিক লাইব্রেরিতে একই গেম যুক্তি


11

কোন কোড দর্শন / বিমূর্ততা / প্রোগ্রাম ডিজাইনের কাঠামো একটি গেমটি 2 ডি এবং 3 ডি গ্রাফিক্স (পৃথকভাবে) উভয় দিয়ে গেম যুক্তিটির পুনরায় কোড না করে ব্যবহার করার অনুমতি দেয়?

আমরা একই কোডটি নেওয়ার কথা বলছি, ন্যূনতম জিনিস বদলে (উদাহরণস্বরূপ, 3 ডি সম্পদের জন্য ফাইলের নাম দিয়ে 2 ডি সম্পদের জন্য ফাইলের নাম আদান প্রদান), এবং জেনেরিক / টেম্পলেট প্রতি বেস ক্লাসের কয়েকটি বিশেষায়িত ক্ষেত্রগুলি প্লাগিং করতে পারি।

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

এটি একটি এমভিসি প্রসঙ্গে রাখার জন্য: কন্ট্রোলারগুলি হুবহু হ'ল ("আপ" কী টিপলে প্লেয়ারদের ত্বরণকে 3.5 ইউনিট / সেকেন্ডে সেট করা হবে), ভিউগুলি সম্পূর্ণ আলাদা (2 ডি বনাম 3 ডি), এবং মডেলটি একই গ্রাফিক্সের সাথে সরাসরি সম্পর্কিত কিছু ব্যতীত (পরিবেশের জন্য সংঘর্ষের চেক প্রতি 5 সেকেন্ডে সঞ্চালিত হয় এবং এটি একই অ্যালগরিদম ব্যবহার করে Note নোট করুন যে এর অর্থ হ'ল 2 ডি সংস্করণে সমস্ত গেম অবজেক্টের জন্য একটি জেড-কো-অর্ডিনেট রয়েছে, তবে এটি কেবল উপেক্ষা করা বা ব্যবহারকারীর কাছে অন্য উপায়ে প্রদর্শিত, উদাহরণস্বরূপ এমন ছায়ার দ্বারা যা প্লেয়ার যখন বাতাসে থাকে তখন আরও বাম দিকে প্রদর্শিত হয়)।

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

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


আমি নিশ্চিত না যে এটি ব্যবহারিক। এত গেম যুক্তি ভেক্টর ম্যাথ ব্যবহার করে, আপনি 2 ডি তে রূপান্তর করার আগে 3 ডি তে সমস্ত কিছু করতে হবে বা রেন্ডারিংয়ের জন্য যা কিছু করতে হবে, বা আপনার ভেক্টর লাইব্রেরিটি পুরোপুরি বিমূর্ত করতে হবে - যা অবশ্যই অবাস্তব হবে?
10p

"বিমূর্ত স্তর" শব্দটি সন্ধান করুন এবং এর সাথে পরিচিত হোন, কারণ আপনি দুজন কিছু সময়ের জন্য একসাথে কাজ করতে যাচ্ছেন।
zaratustra

উত্তর:


8

আমি মনে করি যে সমস্ত (?) আপনার গ্রাফিক্স লাইব্রেরি মোড়ানো বিমূর্ততার একটি স্তর হবে; আপনি যে লাইব্রেরিটি ব্যবহার করছেন তার জন্য আপনার একটি নতুন প্রয়োজন হবে এবং প্রত্যেকের জন্য একই রকম বাহ্যিক এপিআই থাকা দরকার।

স্ট্রিংগুলির স্থানীয়করণের কথা চিন্তা করুন: আপনার গেমটিতে "ইনভেন্টরি" স্ট্রিংটি হার্ড-কোডিংয়ের পরিবর্তে আপনি আপনার (সম্ভবত কাস্টম-বিল্ট) স্থানীয়করণ লাইব্রেরি কল করবেন যা কিছু প্রক্রিয়া করবে এবং যথাযথ স্ট্রিংটি ফিরে আসবে, এর প্রেক্ষাপটে নির্ভর করে খেলাাটি.

একইভাবে, আপনার গ্রাফিক্স ইঞ্জিনের সমস্ত কল আপনার চারপাশে আপনার মোড়কের মাধ্যমে করা হবে।

এটি করার ক্ষেত্রে, আপনি আপনার গ্রাফিক্স ইঞ্জিনটি দিতে পারেন এমন আদেশগুলি সীমাবদ্ধ / সীমাবদ্ধ করে। এখানে কিছু প্রয়োজনীয় জিনিস রয়েছে:

  1. (অবস্থান) এ আঁকুন (গ্রাফিক বস্তু)
  2. (গ্রাফিক বস্তু) এর বৈশিষ্ট্য (আলফা, ঘূর্ণন, ইত্যাদি) সংশোধন করুন
  3. (গ্রাফিক বস্তু) (অবস্থান) এ সরান
  4. মানচিত্র তৈরি করুন (স্তর নাম / তথ্য কাঠামো)

এবং কিছু অন্যান্য, যা আপনি আপনার প্রকল্পে কাজ করার সময় খুঁজে পাবেন।

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

এখন, আপনার প্রতিটি গ্রাফিক্স লাইব্রেরির জন্য একটি নতুন মোড়ক তৈরি করুন এবং এপিআই প্রয়োগ করুন__ এ __ এ আঁকতে একটি আদেশ যখন আপনাকে দেওয়া হয়, আপনাকে স্প্রাইট বা মডেল তৈরি করতে কোড ব্যবহার করতে হবে এবং আপনার পরিবেশে আঁকতে হবে। এটির জন্য কিছু কৌশল প্রয়োজন হতে পারে যেমন একটি হ্যাশে প্রতিটি স্প্রিট সংরক্ষণ করে নির্দিষ্ট প্রতীক দ্বারা অন্য সময়ে পুনরায় অ্যাক্সেসযোগ্য হয়।

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

আশা করি এটি আপনাকে শুরু করতে সহায়তা করে =]


2

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

আপনার দু'টি ক্লায়েন্ট তৈরি এবং সমর্থন করার সম্পূর্ণ উদ্দেশ্য নিয়ে আপনার গেমটির নকশা শুরু করা প্রয়োজন এবং 2 ডি ক্লায়েন্টের পক্ষে যে ধারণাটি তৈরি করা হয়েছে তার মধ্যে সমস্ত গেমের কার্যকারিতা সীমাবদ্ধ করা সম্ভবত সবচেয়ে নিরাপদ হবে।

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

2 ডি ক্লায়েন্ট (8 বা 16 বা এরকম) এর জন্য নির্দিষ্ট সংখ্যক দেখার কোণ নির্ধারণ করা এবং সেই সমস্ত সীমাবদ্ধতার মধ্যে ফিট করার জন্য সমস্ত বিষয়বস্তু বিকাশ করা ভাল। দুর্ভাগ্যক্রমে যদি আপনার মাত্রা এবং অবজেক্টগুলি থাকে যা কেবলমাত্র একটি নির্দিষ্ট কোণ থেকে দেখার জন্য ডিজাইন করা থাকে তবে এটি কোনও 3D ক্লায়েন্টের মধ্যে থেকে বেশ অদ্ভুত লাগবে।

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


0

আমি মনে করি আপনি নিজের প্রশ্নের উত্তরটি বেশ উত্তর দিয়েছেন:

এটি একটি এমভিসি প্রসঙ্গে রাখার জন্য: কন্ট্রোলারগুলি হুবহু একই ("আপ" কী টিপলে খেলোয়াড়দের 3.5 ইউনিট / সেকেন্ডে একসিলারেশন সেট করা হবে), ভিউগুলি সম্পূর্ণ আলাদা (2 ডি বনাম 3 ডি), এবং মডেলটি একই গ্রাফিক্সের সাথে সরাসরি সম্পর্কিত কিছু বাদে।

সুতরাং, ইনপুট, গেম লজিক ইত্যাদি এবং গ্রাফিক্সের মধ্যে পর্যাপ্ত বিমূর্ততা সরবরাহ করে আপনি সমস্যার সমাধান করবেন।

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


0

আপনি যদি এটি সহজ চান তবে এটি সহজ রাখুন: - অবজেক্টগুলি সরাতে গেমের যুক্তি লিখুন। রেন্ডারিং সম্পর্কিত যে কোনও ডেটা তাদের সংরক্ষণ করবেন না। - রেন্ডারারগুলি লিখুন যা গেমের ডেটার অবস্থা এবং এটি আঁকতে সুযোগ দেওয়া হয়।

আপনি এর জন্য কম-বেশি জটিল প্রোগ্রামিং কৌশল ব্যবহার করতে পারেন। আপনার কেবলমাত্র প্রয়োজন প্রতিটি গেমের অবজেক্টের জন্য আপনাকে "অতিরিক্ত" ডেটা দেওয়ার একটি উপায়। সবচেয়ে সহজ উপায় শূন্য অতিরিক্ত ডেটা প্রয়োজন! গেম অবজেক্টটি যদি "উইজার্ড" হয় তবে একটি উইজার্ড আঁকুন।

আপনার যদি আরও জটিল পদ্ধতির প্রয়োজন হয় তবে পলিমারফিজম, মেমেন্টো প্যাটার্ন, হ্যাশ টেবিল, শূন্য * পয়েন্টার ইত্যাদির বিষয়ে বিবেচনা করুন engineer

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