Các bạn nên mở sources code vừa đọc vừa so sánh với tut này vì mình sẽ giải thích những gì trong sources code.
1. Keyboard
- Bàn phím là thành phần không thể thiếu trong các game trên PC, Console,…. Vì vậy thành phần Input này không thể thiếu được.
- Input mình sẽ cài đặt trong class Scene như ở hình trên, gồm 2 hàm với bàn phím là OnKeyDown: hàm này được gọi khi có phím nhấn xuống và chỉ xử lý được 1 phím trong hàm này. OnKeyUp hàm này được gọi khi có nhím được thả ra. 2 hàm trên có tham số truyền vào là mã số của Virtual Key. Các bạn xem thêm ở đây https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
- Để thực hiện được các lệnh input từ bàn phím mình sẽ nhờ đến Message của Win32. Cụ thể là cài đặt ở trong file main.cpp ở hàm LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- Sự kiện nhấn phím xuống:
case WM_KEYDOWN:
SceneManager::GetInstance()->GetCurrentScene()->OnKeyDown(wParam);
break;
- Sự kiện nhả phím:
case WM_KEYUP:
SceneManager::GetInstance()->GetCurrentScene()->OnKeyUp(wParam);
break;
- wParam là tham số của hàm callback của Win32. Các bạn xem trong Source code ở file main.cpp sẽ thấy rõ hơn.
- Để sự dụng input thì khi tạo Scene mới các bạn phải Override lại 2 hàm này để có thể xử lý. Mình có làm Demo ở trong class DemoScene(file DemoScene.cpp).
2. Mouse
- Tương tự với bàn phím thì Mouse cũng sử dụng Message của Win32 để xử lý.
case WM_LBUTTONDOWN:
SceneManager::GetInstance()->GetCurrentScene()->OnMouseDown((float)GET_X_LPARAM(lParam),
(float)GET_Y_LPARAM(lParam));
Tổng kết
- Việc cài đặt Input khá đơn giản nhờ vào sự trợ giúp của Win32, tuy nhiên còn một cách khác là sử dụng API của DirectX thì cách này khá là fứck tạp cũng đã được đề cập ở trong tài liệu của Clb và mình có share đến trong bài viết đầu tiên.
- Các bạn xem Source Code để hiểu hơn về việc cài đặt Input cũng như sử dụng nó ở trong class DemoScene.
sao k dùng directX input v a?
ReplyDelete