Ich versuche ein Plattformspiel zu schreiben, bei dem die Sprites für die Level-Hintergründe in 512x512 Teile aufgeteilt sind. Ich speichere 3 Blöcke gleichzeitig und versuche, Code zu schreiben, um alle drei auf den Bildschirm zu bringen. Hier ist der aktuelle Code, den ich habe:
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);
Das Problem, auf das ich stoße, ist, dass nur der Block auftaucht, der zuerst aufgebrochen wird. Der Rest wird nicht auf dem Bildschirm angezeigt. Ich denke, das Problem hat möglicherweise etwas mit Alpha-Transparenz zu tun, aber selbst wenn sich die Chunks überhaupt nicht überlappen, können sie immer noch nicht verschwinden. In anderen Teilen des Codes werden mehrere Dinge gleichzeitig auf dem Bildschirm angezeigt, z. B. Zeichen und Hintergründe, und alle werden korrekt angezeigt. Dieses spezielle Codesegment ist der einzige Bereich, in dem dieses Problem auftritt.
Wenn ich die Zeile auskommentiere, die left_chunk überblendet, ändert sich dies in Folgendes:
Antworten:
Die SDL-Dokumentation besagt, dass SDL_BlitSurface das endgültige Rechteck nach dem Blitting in dstrect speichert. Das Zurücksetzen der where- Variablen behebt das Problem.
quelle