Chào anh chị, em đang làm một hàm xử lý sự kiện nhấn chuột trái và dùng SDL_PollEvent, SDL_MouseButtonDown, mỗi lần bấm chuột thì nhân vật sẽ di chuyển một lượng. Nhưng mà khi em cho hàm này vào vòng lặp sự kiện để xử lý thì nếu em bấm giữ chuột nhân vật sẽ di chuyển mãi cho tới khi nhả chuột, không biết có cách nào làm cho mỗi lần mình bấm chuột thì nhân vật chỉ di chuyển một lượng và phải cho tới khi mình nhả chuột ra và bấm lần nữa thì nó mới di chuyển tiếp không vậy ạ.
Em cám ơn.
Hỏi về xử lý sự kiện trong SDL với C++?
cách dễ nhất là làm 1 biến movingState
trong đó chỉ có thể có 3 giá trị là None
= đang đứng yên, Moving
= đang di chuyển, Moved
= đã di chuyển :V Khi MOUSEBUTTONDOWN thì nếu movingState
là Moved hay Moving thì ko làm gì cả, nếu là None
thì gán movingState
thành Moving
. Ngoài vòng lặp event nếu movingState
là Moving
thì thực hiện di chuyển, rồi gán movingState
thành Moved
. Khi MOUSEBUTTONUP thì gán movingState
thành None
là xong :V Nếu có vụ nhấn lẹ quá cả 2 sự kiện UP và DOWN xuất hiện cùng lúc trong 1 frame thì có thể thêm 1 state mới là FastMove
chẳng hạn :V khi FastMove
thì giống như Moving
, nhưng move xong thì set movingState
thành None
thay vì Moved
.
6 Likes
Em xin cám ơn ạ !!!