SDL blitting พื้นผิวหลาย ๆ อันพร้อมกัน


10

ฉันพยายามเขียนเกม platforming ที่ sprite สำหรับพื้นหลังเลเวลถูกแบ่งออกเป็นชิ้นขนาด 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);

ปัญหาที่ฉันพบคือสิ่งใดก็ตามที่ถูกทำให้เป็นก้อนเป็นครั้งแรกเป็นสิ่งเดียวที่ปรากฏขึ้น ที่เหลือไม่ปรากฏบนหน้าจอ ฉันคิดว่าปัญหาอาจมีบางอย่างที่เกี่ยวข้องกับความโปร่งใสอัลฟ่า แต่แม้ว่าชิ้นส่วนจะไม่ทับซ้อนกันพวกเขาก็ยังคงล้มเหลว ในส่วนอื่น ๆ ของรหัสฉันจะทำหลายอย่างพร้อมกันบนหน้าจอในเวลาเดียวกันเช่นตัวละครและพื้นหลังและสิ่งเหล่านั้นจะปรากฏขึ้นอย่างถูกต้อง ส่วนของรหัสนี้เป็นพื้นที่เดียวที่ฉันพบปัญหานี้

ภาพหน้าจอ

หากฉันใส่ความคิดเห็นในบรรทัดที่ blits left_chunk มันจะเปลี่ยนเป็น:

ภาพหน้าจอ After


คุณแน่ใจหรือไม่ว่าค่า X ที่คำนวณได้ของคุณวางตำแหน่งภาพในพื้นที่ที่มองเห็นได้ของหน้าจอ?
Zack The Human

@ZackTheHuman พวกเขาปิดหน้าจอบางส่วนเนื่องจากหน้าจอมีขนาดเพียง 300x175 และชิ้นส่วนแผนที่เป็น 512x512 ฉันคิดว่าอาจเป็นปัญหาในตอนแรก แต่ไม่ว่าพวกเขาจะอยู่บนหน้าจอหรือดูเหมือนจะไม่เกี่ยวข้องกับว่ามันจะแสดงผลอย่างถูกต้องหรือไม่ ฉันสามารถอัปโหลดภาพหน้าจอเพื่อช่วยอธิบายปัญหา
เครื่องยนต์ extropic

1
เอกสาร SDL บอกว่าSDL_BlitSurfaceบันทึกสี่เหลี่ยมสุดท้ายเป็นdstrectหลังจากเกิดการชน มีคุณพยายาม reseting ที่ตัวแปรหลังจากแต่ละ blit?
Asakeron

@ Asakeron นั่นมัน! ผมไม่ได้คาดหวังที่จะได้รับการแก้ไข คุณควรแสดงความคิดเห็นเป็นคำตอบ!
เครื่องยนต์ extropic

คำตอบ:


8

เอกสาร SDL บอกว่าSDL_BlitSurfaceบันทึกสี่เหลี่ยมสุดท้ายเป็นdstrectหลังจากเกิดการชน การรีเซ็ตตำแหน่งตัวแปรแก้ไขปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.