मेरा प्रस्ताव है कि आप TexturePacker का प्रयास करें
- आप बस अपनी सभी छवियों को ड्रैग और ड्रॉप कर सकते हैं और उन्हें पैक कर सकते हैं
- आप विभिन्न संपीड़न लागू कर सकते हैं - उदाहरण के लिए अनुक्रमित PNGs का उपयोग करें जो कम मेमोरी का उपभोग करते हैं - एक मानक PNG फ़ाइल की तुलना में 70% तक कम
- आप एक फ़ाइल डेटा फ़ाइल बना सकते हैं जिसमें आपके प्रत्येक भवन का नाम + स्थिति शामिल है
- मुक्त संस्करण आपके लिए स्प्राइट शीट बनाने के लिए पहले से ही पर्याप्त हो सकता है
क्या आप एंडग्विन, कोकोस 2 डी-एक्स या लिबीडीएक्स जैसे गेम डेवलपमेंट फ्रेमवर्क का उपयोग करते हैं? => कोई नहीं
क्या आपको एक ही समय में अपनी सभी छवियों को लोड करने की आवश्यकता है? ऐसा लगता है कि आप लक्ष्य उपकरणों पर भारी रैम समस्याओं में भाग लेंगे।
अद्यतन: साँप ने मुझे कुछ चित्र भेजे। जैसा कि वादा किया गया है कि उन्हें यहां सार्वजनिक नहीं किया जाएगा, इसलिए मैंने खुद को उपयोग करने के लिए कुछ कला बनाई है कि स्मृति का उपयोग कैसे कम किया जाए।
मूल छवि में, छवि का केवल एक हिस्सा घूम रहा था। मैंने इसे प्रदर्शित करने के लिए एक पक्षी को घर पर रखा है:
मूल रूप से पूर्ण एनीमेशन को एक शीट में पैक करना स्मृति का एक बड़ा अपशिष्ट है। आपको स्थैतिक और गतिशील भागों को विभाजित करना चाहिए:
स्थैतिक:
Anim01:
Anim02:
छवियों में पक्षी की मूल स्थिति रखें । यही कारण है कि ऊपर इतना खाली स्थान है। एनीमेशन को संरेखित करने के लिए आपको इसकी आवश्यकता है।
अब TexturePacker पर छवियों को खींचें और निम्नलिखित मापदंडों का चयन करें
- डेटा प्रारूप: JSON हैश (या XML यदि आप चाहें तो)
- TrimMode: ट्रिम (यह आयताकार बनाता है)
- पिक्सेल प्रारूप: 8x PNGs (लगभग 70% कम मेमोरी) बनाने के लिए 8x - INDEXED
- रोटेशन की अनुमति दें: गलत
- डेटा के लिए फ़ाइल नाम दर्ज करें
परिणाम यह है कि अब आपको 2 फाइलें मिलती हैं: स्प्राइट शीट और एक JSON विवरण फ़ाइल।
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
महत्वपूर्ण भाग फ्रेम और स्प्राइट्स सोर्स हैं ।
फ्रेम आप स्प्राइट शीट में मूल स्प्राइट के स्थान देता है।
spriteSourceSize आपको चित्र बनाने के लिए ऑफसेट देता है - ट्रिमिंग के कारण छोड़ी गई छवि के भाग:
एक साधारण छद्म कोड ड्राइंग दिनचर्या इस तरह दिखता है:
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
आपको अपने ग्राफिक्स सिस्टम में धुरी बिंदु / उत्पत्ति के आधार पर ऑफसेट गणना को समायोजित करना पड़ सकता है। ऊपर दी गई दिनचर्या एक समन्वय प्रणाली मानती है जिसका मूल शीर्ष बचा है।
तो बस 2 पास में घर आकर्षित:
draw("background", 100, 100);
draw("anim_01", 100, 100);
आपको ऑफ़सेट के बारे में ध्यान रखने की ज़रूरत नहीं है - क्योंकि चित्र पहले से ही संरेखित हैं।