एसडीएल एक ही बार में कई सतहों को फोड़ देता है


10

मैं एक प्लेटफ़ॉर्मिंग गेम लिखने की कोशिश कर रहा हूँ जहाँ लेवल बैकग्राउंड के लिए स्प्राइट्स 512x512 विखंडू में टूट जाते हैं। मैं एक बार में 3 चंक्स याद में रखता हूं और स्क्रीन पर तीनों को ब्लिट करने के लिए कोड लिखने की कोशिश कर रहा हूं। यहाँ मेरे पास वर्तमान कोड है:

SDL_Rect where;
where.y = -game->camera->y;

where.x = -game->camera->x - MAP_WIDTH;
SDL_BlitSurface(left_chunk, NULL, screen, &where);

where.x = -game->camera->x;
SDL_BlitSurface(center_chunk, NULL, screen, &where);

where.x = -game->camera->x + MAP_WIDTH;
SDL_BlitSurface(right_chunk, NULL, screen, &where);

मैं जिस मुद्दे पर चल रहा हूं, वह यह है कि जो भी हिस्सा पहले धुंधला हो जाता है वह केवल वही दिखाता है जो दिखाता है। बाकी लोग ऑनस्क्रीन दिखाई नहीं देते। मुझे लगता है कि इस मुद्दे का अल्फा पारदर्शिता के साथ कुछ करना हो सकता है, लेकिन भले ही चोक ओवरलैप न हों, लेकिन वे अभी भी ब्लिट करने में विफल हैं। कोड के अन्य हिस्सों में मैं एक ही बार में स्क्रीन पर कई चीजों को ब्लिट कर रहा हूं, जैसे कि वर्ण और पृष्ठभूमि, और वे सभी सही तरीके से दिखाई देते हैं। कोड का यह विशेष खंड एकमात्र क्षेत्र है जिसका मैं इस समस्या से सामना कर रहा हूं।

स्क्रीनशॉट

अगर मैं उस लाइन को टिप्पणी करता हूं जो left_chunk को ब्लिट करती है, तो यह इसमें बदल जाती है:

स्क्रीनशॉट के बाद


क्या आप सुनिश्चित हैं कि आपके परिकलित एक्स मान स्क्रीन के दृश्य क्षेत्र में छवि की स्थिति में हैं?
ज़ैक द ह्यूमन

@ZackTheHuman वे आंशिक रूप से ऑफस्क्रीन हैं, क्योंकि स्क्रीन केवल 300x175 है और मानचित्र विखंडन 512x512 है। मैंने सोचा था कि पहली बार में यह समस्या हो सकती है, लेकिन वे ऑनस्क्रीन हैं या नहीं, यह अप्रासंगिक लगता है कि यह सही ढंग से प्रस्तुत हो रहा है या नहीं। मैं समस्या को स्पष्ट करने में मदद के लिए स्क्रीनशॉट अपलोड कर सकता हूं।
एक्सट्रोपिक-इंजन

1
SDL प्रलेखन कहता है कि SDL_BlitSurface ब्लिटिंग के बाद अंतिम आयत को घटने से बचाता है । आप reseting की कोशिश की है , जहां प्रत्येक Blit के बाद चर?
असकरॉन

@Asakeron यही था! मुझे उम्मीद नहीं थी कि कहाँ संशोधित किया जाएगा। आपको अपनी टिप्पणी का उत्तर देना चाहिए!
एक्सट्रोपिक-इंजन

जवाबों:


8

SDL प्रलेखन कहता है कि SDL_BlitSurface ब्लिटिंग के बाद अंतिम आयत को घटने से बचाता है । जहाँ चर समस्या को हल करता है उसे रीसेट करना ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.