Hỏi về xử lý sự kiện trong SDL với C++?

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.

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 movingStateMoving 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 ạ !!!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?