2010-06-13 12 views
8

मैं वर्तमान में सी # में लिख रहा हूं जिसे मूल रूप से एनईएस हार्डवेयर की अपनी खुद की व्याख्या कहा जा सकता है जिसे मैं विकसित कर रहा हूं। मैंने एफसीई को निकाल दिया है और देख रहा है कि एनईएस ने ग्राफिक्स को कैसे प्रदर्शित किया और प्रस्तुत किया।'एनबीएस अनुप्रयोगों' पर 'बैंक स्विचिंग' स्प्राइट्स

संक्षेप में, एनईएस में दो बिटमैप ग्राफिकल जानकारी के लायक हो सकते हैं, प्रत्येक 128x128 के आयामों के साथ। इन्हें पीपीयू टेबल कहा जाता है। एक बीजी टाइल्स के लिए था और दूसरा sprites के लिए था। स्क्रीन पर खींचे जाने के लिए इस स्मृति में डेटा होना चाहिए था। अब, यदि एक गेम में अधिक ग्राफिकल डेटा था तो इन दो बैंकों, यह इन बैंकों को इस नई जानकारी के हिस्सों को लिख सकता था - प्रत्येक फ्रेम के अंत में, वहां क्या लिखा था, और अगले फ्रेम से इसे आगे बढ़ाएं।

तो पुराने गेम में प्रोग्रामर बैंक स्विच कैसे किया गया? मेरा मतलब है, स्तर के डिजाइन के भीतर, वे कैसे जानते थे कि कौन सा ग्राफिक सेट लोड हो रहा है? मैंने देखा है कि मेगा मैन 2 बैंकविच करता है जब स्क्रीन प्रोग्राम के स्तर के एक भाग से अगले भाग तक स्क्रॉल करती है। लेकिन उन्होंने इस जानकारी को स्तर में कैसे स्टोर किया - पीपीयू टेबल में कॉपी करने के लिए क्या sprites, और उन्हें कहां लिखना है?

एक और उदाहरण MM2 में रोक देगा। विराम के दौरान बीजी टाइल्स ओवर-लिखित हो जाते हैं, और तब खिलाड़ी को रोक दिए जाने पर पुनर्स्थापित किया जाता है। उन्हें याद आया कि उन्होंने किस टाइल को बदल दिया और उन्हें कैसे बहाल किया?

अगर मैं आलसी था, तो मैं सिर्फ एक विशाल स्थैतिक बिटमैप बना सकता हूं और इस तरह मूल्यों को पकड़ सकता हूं। लेकिन मैं खुद को अधिक मूल्यवान अनुभव बनाने के लिए इन मानों को सीमित करने के लिए मजबूर कर रहा हूं। मैंने एमसी के बारे में अद्भुत गाइड पढ़ा है। बच्चों को बनाया गया था, और मैं इस खेल को प्रोग्राम करने के तरीके के बारे में नंगे होने की कोशिश कर रहा हूं। यह अभी भी मेरे दिमाग को चकित करता है कि इन प्रोग्रामर ने जो कुछ किया उसके साथ उन्होंने क्या किया।

संपादित करें: एकमात्र समाधान जो मैं सोच सकता हूं, अलग-अलग तालिकाओं को पकड़ना होगा जो बताते हैं कि पीपीयू में कौन सी टाइल्स होना चाहिए, लेकिन मुझे लगता है कि यह एक बड़ी स्मृति संसाधन होगा जो एनईएस सक्षम नहीं होगा संभालने के लिए।

उत्तर

3

डब्ल्यूएसओ सोचने और दस्तावेजों को दोबारा पढ़ने के बाद, मुझे लगता है कि मैं एक आदर्श समाधान के साथ आया हूं। एक मैट्रिक्स!

3, -1, -1, -1, -1 
-1, 0, 1, 2, -1 
-1, -1, -1, 3, -1 
-1, -1, 5, 4, -1 
-1, -1, -1, -1, -1 

मैं देखने तालिकाओं के भीतर जानकारी का उपयोग करने का निर्धारण करने के लिए क्या जानकारी मैं जरूरत इस जानकारी का उपयोग कर सकते हैं:

निम्नलिखित आंकड़ों को देखते हुए। पहली प्रविष्टि (0,0) पूरे मानचित्र को परिभाषित करती है, जहां अन्य मान परिभाषित करते हैं कि उस विशेष स्क्रीन में क्या आवश्यक है।

MAP ARRAY PALETTE MUSIC TILESET STARTINGSCR 
    0   0  0  1   4 
    1   4  3  2   2 
    2       etc. 
    3 

तो मानचित्र लोड करते समय, मैं आइटम (0,0) देखता हूं। यह कहेंगे कि मुझे पीपीयू में एक्स टाइल्स लोड करने की जरूरत है, वाई रंग पैलेट, जेड टाइलसेट और ए संगीत का उपयोग करें। यह भी कहेंगे कि स्क्रीन 0 प्रारंभिक स्क्रीन है और स्तर वहां से शुरू होता है - तदनुसार चरित्र को स्थिति दें।

SCREEN  PALETTE TILESET MUSIC TILEDATA SCROLLL SCROLLR SCROLLU SCROLLD 
     0   0   1  2   4  true  true true true 
     1     etc 
     2   2   1  2   3  false false  false true 

अब कहें कि मुझे स्क्रीन को संक्रमण करने की आवश्यकता है। मैं लक्ष्य स्क्रीन बनाम वर्तमान स्क्रीन देख सकता हूं। यदि नई स्क्रीन को पीपीयू में जानकारी की आवश्यकता नहीं है, तो मैं एक संक्रमण शुरू कर सकता हूं जो इसके दौरान डेटा लोड करेगा। मैं यह भी देख सकता हूं कि मैं उस दिशा में स्क्रॉल कर सकता हूं; उदाहरण के लिए, यदि लक्ष्य स्क्रीन -1 है, तो मैं उस दिशा को स्क्रॉल नहीं कर सकता। मैं यह निर्धारित करने के लिए कहीं झंडा भी स्टोर कर सकता हूं कि अगर उस स्क्रीन पर स्क्रॉल किया गया है, तो मैं वापस स्क्रॉल नहीं कर सकता। उदा।, मैं स्क्रीन # 2 में जा सकता हूं लेकिन स्क्रीन में बाईं ओर स्क्रॉल नहीं कर सकता 1.

+1

धन्यवाद, यह बहुत उपयोगी था। –

+0

प्रशंसा के लिए धन्यवाद :) –

संबंधित मुद्दे