2011-10-01 28 views
8

से एक बनावट 2 डी उत्पन्न करना मेरी समस्या यह है कि मुझे एक Texture2D का उपयोग करके लम्बाई बदलने वाली मंजिल का प्रतिनिधित्व करने की आवश्यकता है, जिसका अर्थ है कि किनारों की तरफ पक्ष की छवि है, और बीच में यह वही 'मध्य 'छवि, जैसे: enter image description hereएकाधिक बनावट 2 डी

इसे प्राप्त करने के लिए, मुझे' बाएं किनारे ',' मध्यम 'और' दाएं किनारे 'बनावट मिलती हैं, समस्या यह है कि मुझे नहीं पता कि उन्हें एक सिंगल में कैसे विलय करना है texture2D,

रन-टाइम पर ऐसा करना महत्वपूर्ण है क्योंकि फर्श की लंबाई बदल रही है (क्षैतिज), मैंने पढ़ा है कि आप सेटडाटा का उपयोग करके ऐसा कर सकते हैं लेकिन मुझे नहीं पता कि कैसे ...

यह मेरे लिए बहुत महत्वपूर्ण है कि यह एक बनावट के रूप में कार्य करेगा और एकाधिक बनावट भागों नहीं होगा क्योंकि मैं फर्श को स्थानांतरित करने और इसका उपयोग करने के लिए फारसीर भौतिकी इंजन का उपयोग कर रहा हूं।

मैं दृश्य स्टूडियो 2010 के साथ सी # और XNA उपयोग कर रहा हूँ, मैं लगभग एक-अनुभवी सी # प्रोग्रामर हूँ,

धन्यवाद!

उत्तर

1

सबसे पहले, अपनी मंजिल बनावट के रूप में कार्य करने के लिए एक नया Texture2D बनाएं, उचित चौड़ाई और ऊंचाई निर्दिष्ट करें। फिर, GetData method का उपयोग करके, उन तीन बनावटों का डेटा प्राप्त करें जिन्हें आप मर्ज करना चाहते हैं। अंत में, नए बनावट के डेटा को उचित रूप से सेट करने के लिए SetData method का उपयोग करें (लिंक देखें, आप प्रारंभ सूचकांक निर्दिष्ट कर सकते हैं)।

चेतावनी: GetData और SetData विधियां धीमी हैं। यदि आपको प्रति गेम केवल एक बार (उदाहरण के लिए प्रारंभ में) इस बनावट को बनाने की आवश्यकता है, तो यह कोई समस्या नहीं है।

+0

क्या होगा यदि मैं उन्हें समय की बहुत सारी बनाने की जरूरत? – Itamar

+0

फिर उत्तर बेलो में सुझाई गई रणनीति बेहतर है। –

+0

@MajaRemic उदाहरण कोड? – matrixugly

2

This answer आपकी मदद कर सकता है। या तो आपको अपनी मंजिल को दोहराने के लिए एचएलएसएल का उपयोग करना चाहिए या आपको अपनी मंजिल को रेंडरटाइटल पर खींचना चाहिए और इसे एकल बनावट के रूप में सहेजना चाहिए। का आनंद लें।

+0

एचएलएसएल क्या है, और क्या आप दूसरे समाधान का उदाहरण दे सकते हैं? – Itamar

+2

यहां [रेंडर लक्ष्य] (http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php) पर एक छोटा सा ट्यूटोरियल है। साथ ही, यदि आप उस पृष्ठ को थोड़ा और अधिक देखते हैं, तो आपको एचएलएसएल समेत कई अन्य ट्यूटोरियल मिलेंगे। –

+0

इसके लिए अपने स्वयं के एचएलएसएल शेडर को लिखने की कोई ज़रूरत नहीं है, क्योंकि आप ऐसा कुछ भी नहीं करने जा रहे हैं जो स्प्राइटबैच संभाल नहीं सकता है। –

1

आप farseer उपयोग कर रहे हैं ... लेकिन यह निषेध नहीं करता आप एक खपरैल दृष्टिकोण का उपयोग करने ...

मैं farseer पता नहीं है, लेकिन मुझे लगता है कि यह एक मैट्रिक्स को बदलने प्रदान करते हैं ...

कार्य करें:

Vector2 pos = Vector2.Zero; 
spriteBatch.Begin(...,....,...,..., Transform); 

spriteBatch.Draw(LeftTexture, pos, null, Color.White); 
pos.X += LeftTexture.Width; 
for (int i=0; i<floor_repeats; i++) 
{ 
    spriteBatch.Draw(MidleTexture, pos , null, Color.White); 
    pos.X += MiddleTexture.Width; 
} 
spriteBatch.Draw(RightTexture, pos , null, Color.White); 
संबंधित मुद्दे