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.
Jika saya mengomentari baris yang menghapus left_chunk, itu berubah menjadi ini:
Jawaban:
Dokumentasi SDL mengatakan bahwa SDL_BlitSurface menyimpan persegi panjang terakhir untuk dihancurkan setelah blitting. Mengatur ulang variabel tempat memperbaiki masalah.
sumber