Lưu ý: Tôi phải thăm dò ý kiến, thay vì thực hiện các cuộc gọi lại vì các giới hạn API (SFML). Tôi cũng xin lỗi vì thiếu tiêu đề 'đàng hoàng'.
Tôi nghĩ rằng tôi có hai câu hỏi ở đây; Làm thế nào để đăng ký đầu vào tôi nhận được, và phải làm gì với nó.
Xử lý đầu vào
Tôi đang nói về việc thực tế bạn đã đăng ký rằng phím 'A' đã được nhấn, ví dụ, và cách thực hiện từ đó.
Tôi đã thấy một mảng của toàn bộ bàn phím, đại loại như:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
Nhưng điều này có vẻ không hiệu quả. Chẳng hạn, bạn không chỉ ghép phím 'A' với 'người chơi di chuyển sang trái', mà còn kiểm tra mọi phím, 30-60 lần một giây.
Sau đó tôi đã thử một hệ thống khác chỉ tìm kiếm các phím mà nó muốn.
std::map< unsigned char, Key> keyMap; //Key stores the keycode, and whether it's been pressed. Then, I declare a load of const unsigned char called 'Quit' or 'PlayerLeft'.
input->BindKey(Keys::PlayerLeft, KeyCode::A); //so now you can check if PlayerLeft, rather than if A.
Tuy nhiên, vấn đề với điều này là bây giờ tôi không thể gõ tên, mà không phải liên kết từng khóa.
Sau đó, tôi có vấn đề thứ hai, mà tôi thực sự không thể nghĩ ra một giải pháp tốt cho:
Gửi đầu vào
Bây giờ tôi biết rằng phím A đã được nhấn hoặc playerLeft là đúng. Nhưng làm thế nào để tôi đi từ đây?
Tôi nghĩ về việc kiểm tra
if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
cặp vợ chồng này đầu vào rất lớn cho các thực thể và tôi thấy nó khá lộn xộn. Tôi muốn người chơi tự xử lý chuyển động của mình khi được cập nhật. Tôi nghĩ rằng một số loại hệ thống sự kiện có thể hoạt động, nhưng tôi không biết làm thế nào để đi với nó. (Tôi nghe thấy tín hiệu và khe cắm tốt cho loại công việc này, nhưng dường như nó rất chậm và tôi không thể thấy nó phù hợp như thế nào).
Cảm ơn.