मैं एक 2D गेम विकसित कर रहा हूं, और मेरे पास बहुत सारे स्प्राइट हैं। मैंने 2D में रेंडर करने के लिए 3D एनिमेशन और मॉडल्स का इस्तेमाल किया, ताकि उन्हें "फॉलआउट" या "डियाब्लो" लुक दिया जा सके। यह हाथ से ड्राइंग, लोल से भी आसान है।
मुझे पहले से ही 15fps तक फ्रैमरेट में कटौती करनी पड़ी, जो कि सबसे कम मैं उन्हें बिना चॉपी वाला लुक दे सकता था। हालांकि, यह अविश्वसनीय रूप से चिकनी 24 फ़्रेमों को देखने के कारण उदास था।
ऐसा करने के दो कारण हैं:
1) HDD स्पेस में कटौती करें। जितनी कम छवियां होंगी, मेरा कुल खेल उतना ही छोटा होगा।
2) रैम की खपत में कटौती। लोड करने के लिए कम छवियां, अधिक संभावना है कि मैं अपनी रैम सीमा को फुलाने वाले मुद्दों से बचता हूं।
हालांकि, अगर HDD स्पेस और RAM दोनों में इमेज को कंप्रेस करने का कोई तरीका होता, तो मैं ऐसा करता। मैंने पहले इसका परीक्षण किया है, और RGBG8888 से RGBA5555 को देते समय गुणवत्ता में कोई बदलाव नहीं आया है और अपने TexturePacker प्रोग्राम में RGBA4444 में परिवर्तित होने पर केवल थोड़ा हिट हुआ है। मैं वर्तमान में ऐसा नहीं करता हूं, क्योंकि SFML स्मृति की समान मात्रा का उपयोग करने के लिए लगता है चाहे वह किस प्रकार की .PNG छवि है। मैंने इस पर शोध किया कि इसे अलग तरीके से कैसे लोड किया जाए, लेकिन इस विषय पर कुछ भी पता लगाने में विफल रहा।
मैंने 2 डी वीडियो गेम को कैसे संभालना है, इसके बारे में बहुत कुछ पढ़ा है। आम सहमति भारी है: अपने स्प्राइट्स को शानदार प्रदर्शन के लिए एक बड़े बनावट में पैक करें! तो मैं TexturePacker का उपयोग करके अपने छोटे स्प्राइट्स को बहुत बड़े स्प्राइटशीट में पैक करता हूं।
हालाँकि, मेरी योजना है कि प्रति वर्ण 10-15 एनिमेशन, स्थानांतरित करने के लिए 5 निर्देश, और प्रति एनीमेशन 15-40 फ्रेम (शायद औसतन 24)। 15 एनिमेशन, 5 दिशाओं और औसतन 24 फ्रेम प्रति एनीमेशन के साथ; यह प्रति वर्ण 1800 व्यक्तिगत फ्रेम है। यदि स्प्राइट शीट में पैक किया जाता है, तो इसके बजाय केवल 75 चित्र हैं। (एक स्प्राइट शीट प्रति एनिमेशन, दिशा के अनुसार। 15 * 5)
खेल में एक विशाल बॉस चरित्र के लिए, मैं स्प्राइटशीट का उपयोग नहीं कर सकता और एक समय में बस एक छवि में लोड करने का एक तरीका प्रोग्राम करना होगा। मुझे नहीं पता कि क्या मैं अभी तक प्रदर्शन के लिए ऐसा कर सकता हूं।
पात्रों के लिए, मैं पहले से ही उन्हें स्प्राइटशीट में पैक कर देता हूं। एक एकल चरित्र के बारे में घूमना, यह ज्यादातर समय काम करता है, हालांकि कभी-कभी यह रुक जाता है। हालाँकि, मैं अपने बीमार कल्पना कोड के लिए उस चरित्र के लिए सभी बनावट को उतारने के बजाय बनावट को स्वैप करता हूं।
अगर मैं बनावट को उतारने के लिए था, तो यह स्प्राइट शीट के लिए समझ में आता है। मैं केवल कल्पना करूँगा कि प्रत्येक चरित्र के लिए 1800 छोटे चित्रों को प्रीलोड करना एक बुरा विचार है।
हालाँकि, मुझे लगता है कि उन्हें एक समय में एक मेमोरी से बाहर और बाहर स्ट्रीमिंग करना बहुत तेज़ होगा, इसलिए मुझे केवल एक समय में मेमोरी में एक ही छवि रखने की आवश्यकता होगी। क्या इसका मतलब यह नहीं होगा कि किसी भी क्षण में मैं केवल प्रत्येक चरित्र को 45 + एमबी के बजाय कुछ KB का उपभोग करूंगा?
मुझे लगता है कि यह मेरे प्रदर्शन को मार देगा, क्योंकि स्ट्रीमिंग को अविश्वसनीय रूप से तेज़ होना होगा (15 छवियां स्मृति और प्रतिपादन से बाहर जा रही हैं, प्रति सेकंड) और हालांकि छवियां बहुत छोटी होंगी- चरित्र स्प्राइटशीट लोड करने के लिए यह एक बेहतर विचार हो सकता है। इसके बजाय स्मृति में। लेकिन मुझे अपने बड़े बॉस किरदार के लिए वैसे भी सिंगल-इमेज स्ट्रीम-जैसे रेंडर सिस्टम को कोड करना होगा।
मैं प्रयोग कर रहा हूं, लेकिन यह एक सरल प्रक्रिया नहीं है। विशेष रूप से इस तथ्य को देखते हुए कि मैं खेल इंजन के अन्य हिस्सों पर काम कर रहा हूं जो अभी ग्राफिक्स से नहीं निपटते हैं।