cuốn sách gpt4 ai đã làm

SDL_PollEvent dường như ngăn không cho bề mặt cửa sổ cập nhật

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 07:11:50 27 4
mua khóa gpt4 Nike

Tôi hiện đang xem hướng dẫn Lazy Foo cho SDL2 (Tôi đang thực hiện việc này trên máy Linux) và tôi đang gặp một số lỗi có chứa SDL_Sự kiện thăm dò ý kiến Trong vòng lặp chính của tôi, nó dường như bị chặn SDL_UpdateWindowSurface cập nhật thực tế. nếu tôi rời đi SDL_Sự kiện thăm dò ý kiến vòng lặp, bmp đã tải sẽ được hiển thị chính xác. Tuy nhiên, nếu tôi bao gồm SDL_Sự kiện thăm dò ý kiến vòng lặp hoặc thậm chí gọi SDL_Sự kiện thăm dò ý kiến, cửa sổ không bao giờ cập nhật hình ảnh. Mọi thứ khác có vẻ hoạt động tốt,SDL_Sự kiện thăm dò ý kiến Các sự kiện được xếp hàng chính xác và vòng lặp xử lý các sự kiện một cách chính xác, nhưng vì lý do nào đó lại chứa SDL_Sự kiện thăm dò ý kiến Có một sự khác biệt trực quan giữa việc đi ra và rời đi.

sử dụng Bài 03: Lập trình hướng sự kiện Mã được cung cấp:

Vòng lặp này không cập nhật được cửa sổ:

trong khi( !bỏ )
{
// Xử lý các sự kiện trong hàng đợi
while( SDL_PollEvent( &e ) != 0 )
{
// Yêu cầu của người dùng thoát
if(e.type == SDL_QUIT)
{
bỏ = đúng;
}
}

//Áp dụng hình ảnh
SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );

//Cập nhật bề mặt
SDL_UpdateWindowSurface( gWindow );
}

Vòng lặp này cập nhật thành công cửa sổ với hình ảnh đã tải:

trong khi( !bỏ )
{

//Áp dụng hình ảnh
SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );

//Cập nhật bề mặt
SDL_UpdateWindowSurface( gWindow );
}

Nhưng nó đã ngừng hoạt động, chứa SDL_Sự kiện thăm dò ý kiến Một cuộc gọi duy nhất tới:

trong khi( !bỏ )
{
SDL_PollEvent(&e);

//Áp dụng hình ảnh
SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );

//Cập nhật bề mặt
SDL_UpdateWindowSurface( gWindow );
}

câu trả lời hay nhất

Tài liệu SDL_GetWindowSurface Nếu cửa sổ được thay đổi kích thước, bề mặt sẽ không hợp lệ. Một số sự kiện được tạo khi cửa sổ ban đầu được tạo, chẳng hạn như SDL_WINDOWEVENT_SHOWNSDL_WINDOWEVENT_EXPOSED. Mặc dù cửa sổ không được đánh dấu là người dùng có thể thay đổi kích thước, tôi cho rằng trình quản lý cửa sổ vẫn có thể thực hiện thay đổi kích thước; bạn có thể cần kiểm tra những sự kiện nào được đặt trong hàng đợi sự kiện (vì tôi không thể tái tạo sự cố của bạn - đó có thể là do trình quản lý cửa sổ cụ thể) .

Nói cách khác, ở các thế giới khác, bề mặt cửa sổ không được đảm bảo tồn tại sau một số sự kiện nhất định, do đó, việc xóa hàng đợi sự kiện về mặt lý thuyết sẽ làm mất hiệu lực bề mặt. Sau khi xóa hàng đợi sự kiện trước khi vẽ, bạn cần lấy bề mặt cửa sổ trên mọi khung hình:

trong khi( !bỏ )
{
// vòng lặp sự kiện ở đây

// lấy bề mặt để vẽ lên
gScreenSurface = SDL_GetWindowSurface(gWindow);

//Áp dụng hình ảnh
SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );

//Cập nhật bề mặt
SDL_UpdateWindowSurface( gWindow );
}

Về c++ - SDL_PollEvent dường như ngăn bề mặt cửa sổ cập nhật, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/40113594/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress