গেমের বিষয়বস্তু সঞ্চয় করার জন্য কি এক্সএমএল / জেএসএন / পাঠ্য বা একটি ডেটাবেস ব্যবহার করা ভাল?


29

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

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

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

সুতরাং প্রশ্ন: কোনটি পছন্দনীয় পদ্ধতির? আমি ডিবির দিকে ঝুঁকছি, তবে আমি জানতে চাইছি পাঠ্য ফাইলগুলির কোনও লুকানো সমস্যা বা প্রকৃত শক্তিশালী সুবিধা রয়েছে কিনা। বা যদি এগুলি ছাড়াও অন্য কোনও বিকল্প থাকে (আমার ধারণা বাইনারি ফর্ম্যাটে সিরিয়ালাইজ করা?)

উত্তর:


18

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


এটি একটি দুর্দান্ত পয়েন্ট। আমি বহু-ব্যক্তি কর্মপ্রবাহ খুব ঘনিষ্ঠভাবে বা সংস্করণ নিয়ন্ত্রণ হিসাবে বিবেচনা করি নি। এটি উভয়ই কমপক্ষে উত্স নথি হিসাবে পাঠ্য ফাইলের পক্ষে খুব ভাল যুক্তি। পাশাপাশি সহজ সরঞ্জাম সমর্থন। যে দৃষ্টিকোণ জন্য ধন্যবাদ!
কোডেক্সআর্কানিয়াম

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

1
কীভাবে সাহায্য করবে? একটি কাস্টম সম্পাদক ব্যবহার করে এবং তারপরে পাঠ্য ফাইলগুলিতে আউটপুট আউট করা আপনাকে প্রতিটি বিকল্পের সবচেয়ে খারাপ অংশ দেয় :
পি

7

জেএসএন খুব হালকা ও বোঝা সহজ। আমি মনে করি এটি একটি খেলার জন্য আরও উপযুক্ত suited সিজেএসন সত্যিই দুর্দান্ত। এটি আপনার উত্সে একইভাবে এসকিউএলাইটের মতো অন্তর্ভুক্ত করবে।

এক্সএমএল ফাইলগুলি আপনার ভাবার চেয়ে সম্পাদনা করা কঠিন। আপনি যদি সেই রাস্তাটিতে যান তবে লোকেরা তাদের সাধারণ সমস্যাগুলি এড়াতে সহায়তা করার জন্য লোকদের জন্য একটি সম্পাদক তৈরি করতে পারেন।


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

7

আমি এখানে পার্টিতে দেরি করেছি তবে আমি এটি নিয়ে অনেক সময় ব্যয় করেছি।

প্রথমে আমি নিম্নলিখিতটি কেন ব্যবহার করি না:

এক্সএমএল: অত্যধিক ভারবোজ। অপ্রয়োজনীয় টন। ক্ষেত্রের নামগুলি পুনরাবৃত্তি করছেন? স্থূল

জেএসন: আমি মনে করি জেএসএন একটি ইউআই লেআউটের জন্য দুর্দান্ত তবে একটি ডাটাবেসের জন্য, নরক। এটিতে এক্সএমএল, রিডানডেন্সি এবং গভীর বাসা বাঁধার মতো একই সমস্যা থাকবে। স্থূল.

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

অবশেষে, আমি যে সমাধানটি ব্যবহার করতে চেয়েছি তা এখানে (এবং আমি এটি পছন্দ করি)।

সিএসভি : সরল। আমাকে সারণী বিন্যাসটি ব্যবহার করতে দেয় এবং আমার যখন এটি আপডেট করার দরকার হয় তখন আমার কাছে একটি সহজ রেফারেন্স থাকে। আমি আমার সমস্ত অস্ত্রের জন্য একটি টেবিল, সমস্ত বৈশিষ্ট্যের জন্য কলাম এবং প্রতিটি ধরণের অস্ত্রের জন্য সারি রাখতে পারি।

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

তারপরে আপনার কেবলমাত্র সিএসভি ফাইলগুলি আপনার গেমটিতে পার্স করা দরকার। আমি ইউনিটি ব্যবহার করি তাই আমাকে যা করতে হয়েছিল তা হল এই নিফটি সি # সিএসভি পার্সারটি ব্যবহার করেছিলাম:

সিএসভি পার্সার উদাহরণ

আপনি সিএসভি ফাইলগুলিকে আপনার গেম ডেটা অবজেক্টগুলিতে রূপান্তর করেন এবং আপনি যেতে ভাল। ইউনিটির সাথে আপনি এগুলিকে স্ক্রিপ্টযোগ্য ওবজেক্টে রূপান্তর করতে পারেন । সুতরাং আমার কর্মপ্রবাহটি হল: সিএসভি আপডেট করুন -> স্ক্রিপ্টযোগ্য অবজেক্টে সিএসভি পার্স করুন -> আমার গেমের জন্য স্ক্রিপ্টযোগ্যঅবজেক্টস থেকে ডেটা ব্যবহার করুন


6

এর উত্তরটি নির্ভর করে আপনি গেমটির জন্য কোন ভাষাটি ব্যবহার করছেন।

আপনি যদি সি ++ ব্যবহার করেন তবে বিদ্যমান এক্সএমএল লাইব্রেরিগুলির মধ্যে একটি (যেমন টিনিএক্সএমএল বা এক্সএক্সপ্যাট ) ব্যবহার করার জন্য আপনাকে পরামর্শ দেওয়া হবে ।

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

জেএসএন প্রচুর গতি অর্জন করছে এবং আপনার অ্যাপ্লিকেশন যদি একাধিক ভাষা ব্যবহার করে লেখা হয় তবে এটি অবশ্যই সেরা পছন্দ।

সংক্ষেপে, এটি আপনার ভাষায় সহজে ব্যবহারযোগ্য able


1
সি ++ থেকে যে কোনও ডিবি ব্যবহার করতে সমস্যা কী?
বুদ্দা

2

আপনি যদি জিনিসগুলির এক্সএমএল রাজ্যে থাকতে চান তবে লোডের কার্যকারিতা বাড়াতে আপনি বাইনারি এক্সএমএল ব্যবহার করতে পারেন ।

উদাহরণস্বরূপ ফাস্ট ইনফোজেট বাইনারি এক্সএমএল এর একটি বাস্তবায়ন implementation

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


যদিও আমি ব্যবহার করব এমন কিছু না হলেও (আমি এক্সএমএল ধরে জেএসএনের দিকে ঝুঁকছি) আমি লিঙ্কগুলির প্রশংসা করি।
কোডেক্সআর্কানিয়াম

1

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

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

যদি এটির "আনলিমিটেড হার্ডড্রাইভ স্পেস" প্রায় হয়, তবে ড্রপবক্স বা অ্যামাজন এস 3 এর মতো কিছুতে সাইন আপ করুন এবং তাদের সাথে সিঙ্ক করুন।

সুতরাং আমার জন্য পরিকল্পনা বর্তমানে:

  1. কনফিগার / স্ক্রিপ্ট / এক্সএমএল (কিছু মানব পাঠযোগ্য বিন্যাস) পাঠ্য ফাইলগুলি (উত্সকোডের মতো)
  2. পার্সার / বৈধকরণকারী যা নতুন স্ক্রিপ্টগুলির মধ্য দিয়ে চলে এবং তারা বিধি অনুসরণ করছে তা পরীক্ষা করে
  3. মূল ফাইলগুলি থেকে বাইনারি বা এসকিউএল-সারি তৈরি করে এমন সংকলক, যাতে এগুলি দ্রুত চালানো + দ্রুত চালানো দ্রুত হয়।

স্থিতিশীলতার বিষয়ে, আমি বর্তমানে একাধিক অবস্থানের মধ্যে "কো-লোকেশন হোস্ট করা" এবং অটোসিঙ্ক হিসাবে ডেটাবেস তৈরি করছি, যাতে যদি কোনও নেটওয়ার্ক / হার্ডওয়্যার ব্যর্থতার এক জায়গায় থাকে তবে অন্যান্য সাইটগুলি একই ট্র্যাফিক / পরিচালনা করতে সক্ষম হবে gamestates।


আকর্ষণীয় সমাধান, বিশেষত আপনার উত্তর লেখা হওয়ার পরে ক্লাউড হোস্টিংয়ে কতটা প্রসার লাভ করেছে তা দেওয়া হয়েছে।
রাইডআউটকোলিন

1

আপনি যদি কাউচডিবি ব্যবহার করেন তবে আপনি অবশ্যই JSON কাঠামো হিসাবে সমস্ত কিছু সংরক্ষণ করবেন। কাউচডিবি আপনার (একাধিক) ব্যবহারকারীর ডেটা কমবেশি বেদনাবিহীন প্রতিলিপি করার যত্ন নেবে।


0

আপনি পিএইচপি, মাইএসকিউএল এবং সি # / জাভাস্ক্রিপ্ট সহ ইউনিটি উইকিতে একটি পদ্ধতি খুঁজে পেতে পারেন এবং এটি এর উদ্দেশ্যটির জন্য দুর্দান্ত কাজ করে।

এটি তিনটি পদক্ষেপ নিয়ে গঠিত

  1. একটি ফাঁকা মাইএসকিউএল ডেটাবেস এবং একটি টেবিল তৈরি করুন।
  2. একটি পিএইচপি সার্ভার সাইড স্ক্রিপ্ট তৈরি করুন (এটি মাইএসকিউএল টেবিলের সাথে সংযুক্ত হবে, একটি ইউনিটি স্ক্রিপ্ট থেকে পদক্ষেপ গ্রহণ করবে (পদক্ষেপ 3), এবং ডাটাবেসটি জিজ্ঞাসা করবে (প্রদত্ত উদাহরণগুলি হয় ডেটা প্রবেশ করানো বা নির্বাচন করা))
  3. ইউনিটি কন্ট্রোলার স্ক্রিপ্ট তৈরি করুন (এটি দ্বিতীয় ধাপে তৈরি পিএইচপি স্ক্রিপ্টের সাথে সংযুক্ত হবে)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.