SDL виблискує кілька поверхонь одночасно


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, він змінюється на це:

Знімок екрана


Ви впевнені, що обчислені значення X розміщують зображення у видимій частині екрана?
Зак Людина

@ZackTheHuman Вони частково перебувають поза екраном, оскільки екран - лише 300x175, а шматки карти - 512x512. Я подумав, що це, можливо, була спочатку проблема, але чи є вони на екрані чи ні, це не має значення для того, правильно відображається чи ні. Я можу завантажити скріншот, щоб допомогти проілюструвати проблему.
екстропік-двигун

1
Документація SDL говорить про те, що SDL_BlitSurface зберігає остаточний прямокутник, щоб зникнути після блиску . Ви намагалися скинути змінну де після кожного проміжку?
Асакерон

@Asakeron Це було все! Я не сподівався, куди його можна змінити. Ви повинні зробити свій коментар відповіддю!
екзотропний двигун

Відповіді:


8

Документація SDL говорить про те, що SDL_BlitSurface зберігає остаточний прямокутник, щоб зникнути після блиску . Встановлення змінної де вирішує проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.