আপনি কীভাবে সমস্ত চিত্র একটি গেম থেকে 1 ফাইলে রাখতে পারেন?


67

আমি স্রেফ সি ++ এসএফএমএল-তে লেখা একটি বেসিক আরপিজি গেমটি শেষ করেছি, আমি গেমটিতে প্রচুর প্রচেষ্টা করেছি এবং আমি এটি বিতরণ করতে চাই, তবে আমি একটি ছোট সমস্যা নিয়ে এসেছি।

সমস্যাটি হচ্ছে, আমার 200 টিরও বেশি চিত্র এবং মানচিত্রের ফাইল রয়েছে (তারা .txt ফাইল যা মানচিত্রের কোডগুলি ধারণ করে) সমস্ত নির্বাহী হিসাবে একই ফোল্ডারে, যখন আমি ফোল্ডারে দেখি, এটি আমাকে কিছুটা দেখে কাঁদতে চায় অনেক সংস্থান, আমি কখনই এমন কোন খেলা দেখিনি যা আপনাকে সমস্ত উত্স সরাসরি দেখায়, পরিবর্তে আমি বিশ্বাস করি তারা একটি নির্দিষ্ট ফাইলে সংস্থানগুলি প্যাক করে।

ঠিক আছে, আমি যা অর্জন করতে চাইছি: আমি সমস্ত ফাইল 1 ফাইলে প্যাক করার আশা করছি (সম্ভবত .txt ফাইলগুলিও হবে) তারপরে সেই ফাইলটি পড়তে সক্ষম হবে বা সহজেই এতে যুক্ত হতে পারব।



আমি এমন কোড দেখেছি যেখানে সমস্ত চিত্র কোডের একটি স্ট্রিংয়ে প্যাক করা হয়েছিল। তবে এটি প্রয়োজনীয়তার কারণে করা হয়েছিল। (এটি একটি 64
কেবি

দুঃখিত এটি একটি 4Kb জাভা প্রতিযোগিতা ছিল। একটি 64Kb এক না।
ওমর কোহেজি

উত্তর:


62

গেম প্রোগ্রামাররা ডেটা সংরক্ষণের দুটি প্রধান পদ্ধতির একটিতে নির্ভর করে:

  • প্রতিটি ডেটা ফাইলকে আলাদা ফাইল হিসাবে সংরক্ষণ করুন
  • প্রতিটি ডেটা ফাইলকে কাস্টম সংরক্ষণাগার বিন্যাসে সঞ্চয় করুন

প্রথম সমাধানের অপূর্ণতা হ'ল নষ্ট ডিস্ক স্পেস সমস্যা, পাশাপাশি ধীর ইনস্টলেশনগুলির সমস্যা।

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

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

সম্পাদনা: গেম ফোল্ডার কাঠামোটি "লুকান" এবং কেবল চালানোযোগ্যকে "রাখুন"

ফোল্ডার গঠনে গেমের ফাইলগুলি "লুকিয়ে" রাখতে আরও একটি সমাধান প্রায়শই ব্যবহৃত হয়। কেবলমাত্র আপনার এক্সিকিউটেবল এবং সম্ভবত একটি রিডমে ফাইল মূল ডিরেক্টরিতে রাখুন এবং গেমের ফাইলগুলিকে "ডেটা" বা অন্য সম্পর্কিত সম্পর্কিত একটি সাব ফোল্ডারে স্থানান্তরিত করুন।

সম্পাদনা: গেমদেব টুটস প্লাসের একটি দুর্দান্ত সংস্থান রয়েছে

সম্পাদনা: লিবারচাইভ

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

সম্পাদনা: বিকল্প এক্সটেনশন সহ জিপ ফর্ম্যাট ফাইল

এখানে, আমি @ জোছিম সউরের মন্তব্য পছন্দ করি

বিকল্প এক্সটেনশান সহ জিপ-ফর্ম্যাট ফাইলগুলি গেমের বাইরেও দুর্দান্ত traditionতিহ্য রয়েছে: জাভা এটি করে , ওপেনডোকামেন্ট ফর্ম্যাট (ওরফে ওপেনঅফিস / লিব্রেঅফিস ফর্ম্যাট) এটি করে , এমনকি অফিস ওপেন এক্সএমএল (যেমন "নতুন" মাইক্রোসফ্ট অফিস ফর্ম্যাট) এটা আছে


2
হ্যাঁ, চোর / সিস্টেমশোক 2 ব্যবহার করা হয়েছে। জিপ ফাইলগুলির নামও অন্য কিছু। জাভাতে আপনি জিপগুলিতে ফাইলগুলি অ্যাক্সেস করার জন্য ট্রুজিপ এর মতো কিছু ব্যবহার করতে পারেন যেমন ফোল্ডারে ফাইলগুলি রয়েছে, আমি ভাবছি সি ++ এর জন্য একই রকম লাইব্রেরি রয়েছে।
নিক


5
@Svish। প্ল্যাটফর্মের উপর নির্ভর করে, ছোট ফাইল প্রচুর পরিমাণে নেওয়া ডিস্ক স্পেসের পরিমাণ একটি বৃহত ফাইলের তুলনায় খুব বড় হতে পারে, এমনকি যদি সেই বৃহত ফাইলটি সংকুচিত না হয় ( .tarউদাহরণস্বরূপ)। এটি ডিস্কে শারীরিকভাবে ডেটা সংরক্ষণ করার পদ্ধতিটিই করতে হবে।
ট্রিগ

1
আহ, এটা সত্য। অনেক বেশি হওয়া উচিত নয়, যতক্ষণ না অনেক আছে, তবে সেক্ষেত্রে এটি সত্যই বাড়িয়ে তুলতে পারে। আমি ইনস্টলেশন এবং আনইনস্টল করতে চাইলে অনেকগুলি ছোট ফাইলও হিট হয়ে যায় imagine
সুইভিশ

2
কাইলোটনের মন্তব্যের সাথে সামান্য সম্পর্কিত, এখানে আর্কাইভ ব্যবহার সম্পর্কে দ্য উইটেনসের ডেভ-ব্লগে জোনাথন ব্লোর একটি পোস্ট এবং স্টিমের প্যাচিং প্রক্রিয়াটির সাথে তারা কীভাবে যোগাযোগ করে তা প্রকাশিত হয়েছে। "সাক্ষী তার বেশিরভাগ তথ্য .zip ফর্ম্যাটে সঞ্চিত একক 2-গিগাবাইট ফাইলে প্যাক করে Ste স্টিমের প্রাথমিক সংস্করণটি আপলোড করার আগে, প্যাচের আকারগুলি হ্রাস করার জন্য আমি একটি সুরক্ষার ব্যবস্থা নিয়েছিলাম, বা আমি ভেবেছিলাম [...] (কল্পনা করুন) ফাইলগুলি এলোমেলো ক্রমে সংরক্ষণ করা হয়েছে: সম্ভবত প্রতিটি প্যাচ প্রতিটি খেলোয়াড়কে পুরো গেমটি পুনরায় ডাউনলোড করার সাথে জড়িত!) "
এরিক

39

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


8
+1 যদি ডিস্কের স্থান বা সুরক্ষা কোনও সমস্যা না হয় তবে এটিই সবচেয়ে সহজ সমাধান।
লরেন্ট কুইভিডু

1
+1 কারণ অন্য লোকটি +1 করেছে। ভুল হতে পারে না, তাই না? (
একসাথে যাচ্ছি

এটি আমার মতে আদর্শ পছন্দ। যদি ফাইল সিস্টেমটি দক্ষতার সাথে পরিচালনা করতে না পারে তবে ফাইল সিস্টেমটি নষ্ট হয়ে গেছে এবং এটির উন্নতি করতে আপনার ওএস নির্মাতার উপর ঝুঁকতে হবে।
সর্বজনীন

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

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

22

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

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

হালনাগাদ:

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


4
আমি আমার বর্তমান প্রকল্পের জন্য ফিজিএফএস ব্যবহার করছি এবং আমি এটি পছন্দ করি। আমার সর্বদা আমার সামগ্রী সংরক্ষণাগার ফাইলটি পুনঃজেনার দরকার নেই; আমি সন্ধানের পথে এবং বিএএম-তে কেবল একটি আপডেট সংস্করণ ফেলে দিতে পারি! এটা কাজ করে।
জ্যাক দ্য হিউম্যান

কিছু উত্তর দেওয়ার পরে আমি সিদ্ধান্ত নিয়েছি আমি ফিজিএফএসের সাথে যাব। আপনি কি একটি সুন্দর টিউটোরিয়াল সুপারিশ যত্ন নেবেন? :)
বাগস্টার

12

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


3

ঠিক আছে, আপনি যেমন উল্লেখ করেছেন তেমন আপনি প্রতারণা করতে পারেন :) আপনি চিত্রাবলী থেকে একটি স্প্রিট-শিট তৈরি করতে পারেন, আজকাল এটি জিপ করার দরকার নেই যদি না এটি এক টন জায়গা বাঁচায়। আপনি চিত্রগুলি থেকে একটি স্প্রিট-শিট বা কয়েকটি স্প্রিট-শিট তৈরি করার পরে, কেবল তাদের এক্সটেনশনের নাম পরিবর্তন করতে পারেন। বেশিরভাগ গেমাররা যাচাই করতে বিরক্ত করবেন না এবং ভবিষ্যতে আপনার গেমটি মোড করতে চান এমন শিল্পীদের কাছে কেন সেই বিকল্পটি রেখে যাবেন না? সেভাবে তারা খুব সহজেই স্প্রিট-শিট তৈরি করতে পারে, এর এক্সটেনশনের নাম পরিবর্তন করতে এবং ঘূর্ণায়মান শুরু করতে পারে।

পাঠ্য ফাইলগুলির সাথে, আমি বিনীতভাবে আপনাকে সেই ডেটাটিকে বাইনারি আকারে রূপান্তর করার পরামর্শ দিচ্ছি। আমি নিশ্চিত যে আপনি এটি করার একটি সহজ উপায় খুঁজে পাবেন .. উদাহরণস্বরূপ, আপনি যদি কেবল এজেড, এজেড এবং 0-9 ব্যবহার করেন তবে প্রতিটি অক্ষরের প্রতিনিধিত্ব করতে আপনি 6 টি বিট ব্যবহার করতে পারেন যা কিছুটা আপনার কপিরাইটযুক্ত উপাদানকে সুরক্ষিত করবে, এটি অন্যদের মানচিত্র সম্পাদনা করা থেকেও বিরত রাখবে .. আপনি চাইলে সর্বদা মানচিত্রের রূপান্তরকারী যুক্ত করতে পারেন। জিপিং যদিও পাঠ্যের জন্য সম্পূর্ণ যুক্তিসঙ্গত।


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

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

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

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

2

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


স্প্রিটশিট তৈরির জন্য বেশ কয়েকটি রেফারেন্স পাওয়ার পরে আমি চিত্রের সংখ্যা কমাতে কিছু রিফ্যাক্টরিং বিবেচনা করেছি। ধন্যবাদ
বুগস্টার

2

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

http://gamedev.tutsplus.com/tutorials/implementation/create-custom-binary-file-formats-for-your-games-data/

স্প্রাইট-শিটগুলি সম্পূর্ণ আলাদা একটি বিষয় তবে এটি বেশিরভাগ গেমের জন্য আদর্শ :)


1

আপনি ব্যবহার করতে পারেন এমন অন্য পদ্ধতি:

এক্সএনভিউয়ের বিনামূল্যে সংস্করণ " Strip of Images" (SHIFT + A) নামে একটি বৈশিষ্ট্য সরবরাহ করে যা আপনাকে তৈরি করতে দেয় sprite-collections

এটি ফাইল অ্যাক্সেসকে হ্রাস করে এবং ওয়েব অ্যাপ্লিকেশন / গেমসের সংখ্যা কমিয়ে আনার জন্য বিশেষভাবে গুরুত্বপূর্ণ HTTP-roundtrips

সমন্বিত মানচিত্রের মাধ্যমে পৃথক চিত্রগুলিতে অ্যাক্সেস অনুমোদিত হয় (উদাহরণস্বরূপ CSS- সংজ্ঞা)।


0

প্রথমে আপনাকে নিজের সমস্ত ছবি / শব্দ / ইত্যাদি লিখতে হবে। সংরক্ষণাগার ডেটা অ্যাক্সেসের জন্য কাস্টম এপিআই ব্যবহার করে রুটিন লোড করা। আরও একটি অপূর্ণতা হ'ল সংরক্ষণাগারটি প্রথম স্থানে তৈরি করতে আপনাকে নিজের সংরক্ষণাগার ইউটিলিটি লিখতে হবে। আপনি সবসময় সংরক্ষণাগার থেকে সমস্ত ফাইল লোড করবেন না যদি না, টিএআর / জিজেড খুব ভাল ধারণা নাও হতে পারে, কারণ আপনার প্রয়োজন মতো নির্দিষ্ট ফাইলগুলি বের করতে পারবেন না। এই কারণেই অনেক গেমগুলি জিপ সংরক্ষণাগার ব্যবহার করে, যা আপনাকে প্রয়োজনীয় হিসাবে পৃথক ফাইলগুলি বের করার অনুমতি দেয় (একটি ভাল উদাহরণ হল কোয়েক 3, যার পিকে 3 ফাইলগুলি আলাদা এক্সটেনশনের জিপ ফাইলগুলি ছাড়া কিছুই নয়)। http://zpp-library.sourceforge.net/

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