SDL membelah beberapa permukaan sekaligus

10

Saya mencoba untuk menulis permainan platforming di mana sprite untuk latar belakang level dipecah menjadi 512x512 potongan. Saya menyimpan 3 potongan memori sekaligus dan saya mencoba menulis kode untuk memasukkan ketiganya ke layar. Berikut ini kode yang saya miliki:

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);

Masalah yang saya hadapi adalah bahwa bagian mana pun yang akan dipukul lebih dulu adalah satu-satunya yang muncul. Sisanya gagal muncul di layar. Saya pikir masalahnya mungkin ada hubungannya dengan transparansi alpha, tetapi bahkan jika potongan tidak tumpang tindih sama sekali mereka masih gagal untuk blit. Di bagian lain dari kode ini, saya mencampurkan banyak hal sekaligus ke layar, seperti karakter dan latar belakang, dan semuanya muncul dengan benar. Segmen kode khusus ini adalah satu-satunya area saya mengalami masalah ini.

Tangkapan layar

Jika saya mengomentari baris yang menghapus left_chunk, itu berubah menjadi ini:

Tangkapan layar Setelah

mesin ekstropik
sumber
Apakah Anda yakin bahwa nilai X yang dihitung menempatkan gambar di area yang terlihat di layar?
Zack The Human
@ZackTheHuman Sebagian dari layar, karena layar hanya 300x175 dan potongan peta adalah 512x512. Saya pikir itu mungkin merupakan masalah pada awalnya, tetapi apakah mereka ada di layar atau tidak tampaknya tidak relevan dengan apakah itu dirender dengan benar atau tidak. Saya dapat mengunggah tangkapan layar untuk membantu menggambarkan masalahnya.
mesin ekstropik
1
Dokumentasi SDL mengatakan bahwa SDL_BlitSurface menyimpan persegi panjang terakhir untuk dihancurkan setelah blitting. Sudahkah Anda mencoba mereset variabel where setelah setiap blit?
Asakeron
@ Asakeron Itu dia! Saya tidak berharap di mana harus dimodifikasi. Anda harus membuat komentar Anda sebagai jawaban!
mesin ekstropik

Jawaban:

8

Dokumentasi SDL mengatakan bahwa SDL_BlitSurface menyimpan persegi panjang terakhir untuk dihancurkan setelah blitting. Mengatur ulang variabel tempat memperbaiki masalah.

Asakeron
sumber