Tôi đang đọc một cuốn sách giới thiệu về SDL, Code và có đoạn mã mẫu như thế này:
trò chơi void::handleEvents()
{
sự kiện SDL_Event;
if (SDL_PollEvent(&event))
{
switch(event.type)
{
trường hợp SDL_QUIT:
m_bRunning = false;
phá vỡ;
default:
phá vỡ;
}
}
}
Tôi biết điều này sẽ xem xét hàng đợi sự kiện và nếu có bất kỳ điều gì, hãy truy xuất nó và chạy nó vào câu lệnh chuyển đổi. Trước khi tôi thêm mã này, cửa sổ đã hiển thị nhưng bạn không thể kéo, đóng hoặc thay đổi kích thước cửa sổ. Bây giờ tôi đã thêm mã này, tôi có thể đóng cửa sổ theo ý muốn. Điều tôi không ngờ tới là tôi có thể kéo và thả các cửa sổ.
Tôi nghĩ đây sẽ là một sự kiện riêng biệt mà tôi cần đưa vào câu lệnh chuyển đổi trong tương lai. Tại sao kéo và thả cũng hoạt động? Đó là SDL_PollEvent (vì tôi đã nhận xét câu lệnh switch nhưng lại bỏ qua "if", tôi vẫn có thể kéo) nhưng tại sao lại như vậy? Ngoài ra, tại sao chỉ kéo và thả hoạt động tự động? Tại sao không thay đổi kích thước?
Chúng tôi không cần xử lý tất cả các sự kiện, một số SDL sẽ xử lý nó cho chúng tôi. Các sự kiện liên quan đến thuộc tính cửa sổ được xử lý tự động. Để thay đổi kích thước cửa sổ, bạn phải thêm cờ SDL_WINDOW_RESIZABLE khi tạo cửa sổ. Mặc dù SDL xử lý việc thay đổi kích thước thực tế của cửa sổ, nhưng nó vẫn có thể yêu cầu một số xử lý sự kiện vì bề mặt được vẽ có kích thước khác và nó sẽ không tự động thay đổi kích thước bất kỳ hình ảnh nào mà chúng tôi cố gắng vẽ vào đó.
Mặc dù tôi không tìm thấy bất cứ điều gì trong tài liệu vềTại sao SDL_PollEvent hoạt động như câu trả lời của bạn mô tả ở trên hoặc nếu đây là hành vi có chủ đích thì nó hoạt động hơi khác trên các hệ thống khác nhau. Trên osx có thể di chuyển cửa sổ mà không có chức năng trên nhưng dấu X đóng sẽ không hiển thị. Việc thêm lại chức năng này cho phép cửa sổ được di chuyển, thu nhỏ và đóng bình thường.
theo documentation , SDL_PollEvent được thiết kế để thực hiện những gì bạn mô tả, xem có sự kiện nào không và truy xuất chúng.
Tôi là một lập trình viên xuất sắc, rất giỏi!