সম্পদ সংরক্ষণ করার সময় আমি কীভাবে সংস্করণ পরিবর্তনগুলি পরিচালনা করতে পারি?


9

আমি কিছুক্ষণের জন্য এখন আরপিজিতে কাজ করছি এবং আমি দুটি সিরিয়ালাইজেশন কৌশল ব্যবহার করি।

  • শত্রু, অস্ত্র, আইটেমগুলি এক্সএমএল হিসাবে সংরক্ষণ করা হয়।
  • মানচিত্র এবং ইভেন্টগুলি "নিয়ন্ত্রিত বাইনারি" হিসাবে সংরক্ষণ করা হয় (প্রতিটি শ্রেণি একটি সেভ / লোড পদ্ধতি পায় এবং তারা সিদ্ধান্ত নেয় যে তারা কী / সঞ্চয় করতে চান))

তবে আমি মানচিত্র এবং ইভেন্টগুলির জন্য আমার পছন্দকে প্রশ্ন করতে শুরু করেছি। আমার উদ্বেগ:

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

প্রথম উদ্বেগ আমার কৌশল পরিবর্তন না করে কাছাকাছি পাওয়া কঠিন। আমি জেএসএনে পরিবর্তনের বিষয়ে ভেবেছিলাম, তবে এটি অনেক কাজ। আমি এটিকে [ডাটাকন্ট্র্যাক্ট] এবং [ডেটা মেম্বার] বৈশিষ্ট্যগুলির সাথে যে কোনও জায়গায় দেখতে দেখতে কুৎসিত বলে মনে করি।

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

উত্তর:


5

সংস্করণ সমস্যা পরিচালনা করার জন্য প্রচুর উপায় রয়েছে; আপনি প্রতি সংস্করণে একটি লোড ফাংশন রেখে এটি করতে পারেন, আপনি সময়ের সাথে সাথে সম্পদ কাঠামোর রূপান্তর (সাধারণত বৈশিষ্ট্যগুলির মাধ্যমে) বর্ণনা করে প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করতে পারেন, আপনি লোড / সেভ ফাংশনগুলির ভিতরে সংস্করণ-নির্দিষ্ট চেক করতে পারেন, এবং সেটার ।

আমি অভিগমন "পরিবর্তনগুলি বর্ণনা" কিন্তু যে বৈশিষ্ট্যাবলী মাধ্যমে এটি করতে চেষ্টা বিশ্রী পায় খুঁজে ফাস্ট । আমি পরিবর্তে ফাংশন ব্যবহার করব; আপনার সমস্ত উপযুক্ত সংস্করণের জন্য Nসংস্করণে ডেটা সংস্করণে ডেটাতে রূপান্তর করে এমন একটি ফাংশন বাস্তবায়ন করুন N + 1। লোডে, সর্বশেষের তুলনায় সংস্করণটি পরীক্ষা করুন এবং যদি তা না হয় তবে সমস্ত উপযুক্ত সংস্করণীয় ফাংশনের মাধ্যমে ডেটা চালান run সর্বদা সর্বশেষতম সংস্করণটি সংরক্ষণ করুন।

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

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


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

দ্বিতীয়ত, ধরে নেওয়া আপনি এমনকি গেমটি শিপিংয়ের জন্য বাইনারি ফর্ম্যাট চান (যা ফাইলের আকার বা ফাইলের IO বারের উন্নতি করতে পারে, সুতরাং এটি একটি বৈধ আকাঙ্ক্ষা), সংস্করণ পরিচালনা করতে আপনার সিরিয়ালাইজেশন এবং deserialization API গুলি ডিজাইন করুন। ভারশনিং হয় কারণ কিছু পয়েন্ট হিসাবে জাহাজ আপডেট বা বাগ সংশোধন করা হয়েছে করতে পারেন, একটি শিপিং প্রেক্ষাপটে দরকারী এখনও। .NET সিরিয়ালাইজেশন এবং বুস্টের সিরিয়ালাইজেশনের সংস্করণ ক্ষমতাগুলি বর্ণনা করে এমন কিছু দস্তাবেজ রয়েছে যা আপনি আকর্ষণীয় দেখতে পারেন। আপনি যদি উভয় পাঠ্য এবং বাইনারি ফর্ম্যাটকে সমর্থন করতে যাচ্ছেন তবে নিশ্চিত হন যে আপনি মাঝে মাঝে সেগুলি পরীক্ষা করেছেন (বা এটি করার জন্য স্বয়ংক্রিয় পরীক্ষাগুলি তৈরি করুন, আরও ভাল)।


মন্তব্যের জন্য ধন্যবাদ, কীভাবে চালিয়ে যেতে হবে সে সম্পর্কে আমাকে কিছু ধারণা দিয়েছেন gave
ব্যবহারকারী 1776562

1

এক্সএমএল বা জেএসএনের মতো অ্যাট্রিবিউট-মান যুক্তগুলির সাথে একটি মার্কআপ ভাষা ব্যবহার করুন।

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

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

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

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


1

আপনি প্রোটোবুফ ব্যবহার করতে পারেন। https://code.google.com/p/protobuf/ এটি আপনাকে জসন / এক্সএমএল এর সুবিধা দেয় যে আপনি পিছনে সামঞ্জস্যপূর্ণ হওয়ার সাথে সাথে বাইনারি হওয়ার সুবিধাটি সহজেই এটিকে প্রসারিত করতে পারেন। কর্মপ্রবাহটি হ'ল, আপনি প্রোটোবুফ ভাষায় একটি ডেটা ফর্ম্যাট বিবরণ তৈরি করেন এবং তারপরে সিরিয়ালাইজেশন এবং ডিসরিয়ালাইজেশনের জন্য উত্স কোড উত্পন্ন করেন। উত্স বিভিন্ন ভাষার জন্য উত্পন্ন করা যেতে পারে। এছাড়াও এটি আপনার পক্ষে বড় আকারের সুবিধা যে আপনার সিরিয়ালাইজড ডেটাগুলির একটি স্পষ্ট স্পেসিফিকেশন রয়েছে জেএসনের বিপরীতে যেখানে স্পেসিফিকেশনটি পড়া / লেখার ক্ষেত্রে নিখুঁতভাবে করা হয়।


দেখতে দুর্দান্ত লাগছে তবে আমি সি # ব্যবহার করি, এটি সি ++, পাইথন এবং জাভা হিসাবে মনে হয়।
ব্যবহারকারী 1776562

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