Xử lý va chạm pygame
Phát triển game với Pygame Part 3: Va chạm và chuyển động
Long time no see, hôm nay mình xin phép được đào mộ lại một series về làm game với pygame. Đây là một series tưởng chừng đã bị mình vùi trong quên lãng nhưng lương tâm cắn rứt, tác giả quyết định hoàn thành nốt series này Show . Hãy cùng tiếp tục phần 3 của serie với chủ đề : Va chạm và chuyển động Chuyển động trong pygameỞ phần trước ta đã biết cách đổi sprite của Mario thông qua các state: Để xử lý các sự kiện phím ấn mà người dùng nhập vào, ta định nghĩa thêm hàm handle trong class Mario để xử lý các xự kiện. Như ở bài trước, tại hàm
Tại hàm
Trong phần này ta sẽ tiến hành implement hàm handle cho Mario.
Như trong phần code ở phía trên, tham số truyền vào là biến
Đó là logic khi chúng ta nhấn một phím xuống. Việc cần làm tiếp theo đó là xử lý khi ta nhả phím ra, lúc này ta sẽ cập nhật lại các trạng thái của Mario về trạng thái đứng yên như ở đoạn code phía trên. Việc di chuyển sang bên phải, đơn giản là thiết lập vận tốc theo chiều x, thay đổi các trạng thái tương ứng với hướng di chuyển. sau khi thực hiện các bước này, chạy thử ta thấy mario đã di chuyển theo đúng các hướng trái phải mà ta chỉ định. Mô phỏng trọng lựcChúng ta cũng xem qua một chút logic về phần chuyển động của Mario. Thứ luôn kéo chúng ta về với mặt đầt, khiến ta không thể bay lượn như chim đó chính là trọng lực. Hãy mô phỏng trọng lượng trong game như sau. Đầu tiên là định nghĩa một số thông số:
Ở đây ta cần có một chút kiến thức về vật lý. Ta giả lập trọng lực như sau:
Khi đó việc thực hiện nhảy lên chỉ đơn giản là di chuyển với vận tốc âm theo phương y:
Ta init vị trí của Mario như sau tại hàm
Như vậy vật sẽ càng ngày càng di chuyển xuống dưới và càng ngày càng nhanh theo đúng mô phỏng trọng lực. Va chạm với mặt đấtĐể có thể thực hiện phần va chạm với platformer ta cần chỉnh sửa lại Map trong Tiled một chút. Như đã nó sơ qua trong bài đầu tiên của series. Map được chia thành các lớp background layer, midground layer, foreground layer, các layer này sẽ là phần hiển thị. Nhưng phần sẽ tương tác với đối tượng của game sẽ là trigger layer, phần này chứa các đối tượng nhưng lại không hiển thị, làm ta có cảm giác là đối tượng đang tương tác với lớp tile. Trong lớp trigger của file map, ta thêm các đối tượng hình chữ nhật với các thuộc tính như sau: Ta đặt giá trị cho thuộc tính là "tlbr" nghĩa là block theo tất cả các hướng trên (t) trái (l) dưới (b) phải (r) cho Tiếp đó ta cần phải xử lý va chạm giữa người chơi với các đối tượng thuộc kiểu
Hình demo khi hiển thị lớp và khi không hiển thị lớp EndVậy là ta đã có một nhân vật Mario có thể di chuyển trên một địa hình cơ bản rồi. Phần tiếp theo sẽ là các cách sử dụng map nâng cao cùng với Tiled Source Codehttps://github.com/vigov5/mario_game/ |