SDL làm mờ nhiều bề mặt cùng một lúc


10

Tôi đang cố gắng viết một trò chơi platforming trong đó các họa tiết cho nền cấp độ được chia thành các khối 512x512. Tôi giữ 3 khối trong bộ nhớ cùng một lúc và tôi đang cố gắng viết mã để làm mờ cả ba màn hình. Đây là mã hiện tại tôi có:

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

Vấn đề tôi gặp phải là phần nào bị mờ trước là phần duy nhất xuất hiện. Phần còn lại không xuất hiện trên màn hình. Tôi nghĩ rằng vấn đề có thể có liên quan đến độ trong suốt của alpha, nhưng ngay cả khi các khối không chồng chéo lên nhau, chúng vẫn không thành công. Trong các phần khác của mã tôi đang làm mờ nhiều thứ trên màn hình cùng một lúc, chẳng hạn như các ký tự và hình nền, và tất cả chúng đều hiển thị chính xác. Đoạn mã đặc biệt này là khu vực duy nhất tôi gặp phải vấn đề này.

Ảnh chụp màn hình

Nếu tôi nhận xét dòng làm mờ left_chunk, nó sẽ thay đổi thành dòng này:

Ảnh chụp màn hình Sau


Bạn có chắc chắn rằng các giá trị X được tính của bạn sẽ định vị hình ảnh trong vùng hiển thị của màn hình không?
Zack The Human

@ZackTheHuman Chúng là một phần ngoài màn hình, vì màn hình chỉ có 300x175 và các khối bản đồ là 512x512. Tôi nghĩ rằng ban đầu có thể là vấn đề, nhưng liệu chúng có trên màn hình hay không dường như không liên quan đến việc liệu nó có được hiển thị chính xác hay không. Tôi có thể tải lên một ảnh chụp màn hình để giúp minh họa vấn đề.
động cơ ngoại khóa

1
Tài liệu SDL nói rằng SDL_BlitSurface lưu hình chữ nhật cuối cùng để xóa sau khi xóa. Bạn đã thử thiết lập lại biến where sau mỗi blit chưa?
Asakeron

@Asakeron Thế thôi! Tôi không mong đợi nơi để được sửa đổi. Bạn nên làm cho bình luận của bạn một câu trả lời!
động cơ ngoại thành

Câu trả lời:


8

Tài liệu SDL nói rằng SDL_BlitSurface lưu hình chữ nhật cuối cùng để xóa sau khi xóa. Đặt lại biến nơi sửa lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.