SDL aynı anda birden fazla yüzeyi örter


10

512x512 parçalara ayrılmış arka planlar için sprite bir platform oyunu yazmaya çalışıyorum. Bir kerede 3 parça hafızada tutuyorum ve üçünü de ekrana sığdırmak için kod yazmaya çalışıyorum. İşte mevcut kod var:

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

Karşılaştığım sorun, hangisinin önce körelirse ortaya çıktığı tek şey olmasıdır. Kalanlar ekranda görünmez. Sorunun alfa saydamlığıyla ilgili bir şey olabileceğini düşünüyorum, ancak parçalar hiç örtüşmese bile hala körelemiyorlar. Kodun diğer kısımlarında, karakterler ve arka planlar gibi ekrana birden fazla şey karıştırıyorum ve hepsi doğru görünüyor. Bu kod segmenti, bu sorunla karşılaştığım tek alandır.

Ekran görüntüsü

Left_chunk blits satır yorum, bu değişir:

Ekran Görüntüsü Sonrası


Hesaplanan X değerlerinizin görüntüyü ekranın görünür alanına yerleştirdiğinden emin misiniz?
Zack The Human

@ZackTheHuman Ekran sadece 300x175 ve harita parçaları 512x512 olduğu için kısmen ekran dışındalar. Bunun ilk başta sorun olabileceğini düşündüm, ancak ekranda olup olmadıkları doğru şekilde işlenip işlenmediği ile alakasız görünüyor. Sorunu göstermek için bir ekran görüntüsü yükleyebilirim.
extropic-motor

1
SDL belgeleri, SDL_BlitSurface öğesinin , blitting işleminden sonra son dikdörtgeni dstrect için kaydettiğini söylüyor . Her bir blit'ten sonra where değişkenini sıfırlamayı denediniz mi?
Asakeron

@ Asakeron Bu kadar! Nerede değiştirileceğini beklemiyordum . Yorumunuzu cevaplamalısınız!
extropic-motor

Yanıtlar:


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.