Hướng dẫn chèn ảnh vào pygmae
Trong bài hướng dẫn trước, mình đã giới thiệu khá nhiều thứ trong pygame. Trong bài hướng dẫn lần này, chúng ta sẽ tiếp tục tìm hiểu những thứ cơ bản khác của pygame. Đây là những phần các bạn cần nắm để có thể làm được một game hoàn chỉnh, bao gồm: cách thêm hình ảnh vào game, tạo chuyển động trong game, bắt sự kiện,... Bây giờ chúng ta cùng bắt đầu thôi! Một số hàm vẽ thường gặpTrong bài hướng dẫn trước chúng ta đã tìm hiểu kĩ cách vẽ một hình chữ nhật. Trong phần này mình sẽ giới thiệu nhanh qua những hàm vẽ thường dùng trong pygame. Thực tế, trong các game người ta ít dùng các hàm để vẽ những hình ảnh, mà người ta sẽ dùng những file ảnh để thêm vào trong game. Mình thì dùng các hàm vẽ này trong lúc test thử hoạt động của game trước khi đặt những hình ảnh vào. Ví dụ, nếu mình muốn làm game Flappy Bird thì mình sẽ vẽ con chim là hình elip trước, sau khi mọi thứ hoạt động ổn định thì mình sẽ tìm hình ảnh con chim để thay thế. Cách để thêm hình ảnh vào thì mình sẽ nói trong phần sau. Bây giờ các bạn hãy xem nhanh qua đoạn code này nhe.
Đây là kết quả khi chạy đoạn code trên: Hàm vẽ hình chữ nhật đã được giới thiệu ở phần trước. Bây giờ chúng ta tìm hiểu các hàm vẽ khác. pygame.draw.circle(surface, color, center, radius, width) Hàm này dùng để vẽ hình tròn.
pygame.draw.ellipse(surface, color, rect, width) Hàm này dùng để vẽ hình elip.
pygame.draw.polygon(surface, color, points, width) Hàm này dùng để vẽ đa giác.
pygame.draw.line(surface, color, start_pos, end_pos, width) Hàm này dùng để vẽ một đoạn thẳng.
Các bạn lưu ý là các giá trị toạ độ hay độ dài là những số nguyên, đơn vị là pixel. Tạo chuyển động trong gameSau khi tìm hiểu qua một số hàm vẽ thì chúng ta đã vẽ được vài thứ lên màn hình. Bây giờ, các bạn sẽ tìm hiểu cách làm cho các hình ảnh ấy chuyển động. Các bạn chạy thử đoạn code này nhé, mình sẽ giải thích sau.
Đây là kết quả: Trước khi tìm hiểu những dòng code thì các bạn cần biết thêm 1 khái niệm là FPS (Frames Per Second). Hiểu theo nghĩa tiếng Việt thì FPS là số lượng khung hình trong 1 giây. Ví dụ: nếu FPS là 60 thì trong 1 giây sẽ có 60 khung hình xuất hiện liên tiếp. Có thể ai cũng biết vòng lặp while chạy rất nhanh, trong 1 giây sẽ lặp rất nhiều lần và tốc độ phụ thuộc vào nhiều yếu tố như code trong vòng lặp, CPU... Vì thế để đảm bảo game hoạt động ổn định thì cần phải thiết lập FPS để vòng lặp game thực hiện với tốc độ nhất định. Để thiết lập FPS thì các bạn hãy chú ý những dùng dòng code sau:
Các dòng code trên hoạt động thế nào thì các bạn có thể tự tìm hiểu thêm nhe! Bây giờ chúng ta hãy tìm hiểu những dòng code khác.
Những dòng code trên dùng để tạo một surface chứa hình
chiếc xe. Biến Bây giờ hãy nhìn vào bên trong vòng lặp game nhé!
Dòng code trên để vẽ chiếc xe (
Sau mỗi vòng lặp thì hoành độ của chiếc xe tăng lên 2 pixel. Điều kiện trong Sẵn đây mình cũng sẽ giới thiệu cho các bạn cách dùng class cho đoạn code chiếc xe. Việc dùng class sẽ giúp quản lý các đối tượng trong game dễ dàng hơn. Các bạn chạy thử đoạn code này nhe. Kết quả chạy thì cũng như trên thôi.
Có thể các bạn dễ nhận ra vị trí của xe ( Vẽ chữPhần này cũng không quá phức tạp nên mình sẽ lướt nhanh nhé! Các bạn hãy chạy thử đoạn code và xem kết quả.
Trước tiên cần phải xác định font chữ cần vẽ. Dòng dưới đây để tạo font chữ:
Biến Tiếp đến là tạo một suface và vẽ chữ lên đó. Dòng dưới này có nhiệm vụ đó:
Tham số Thêm hình ảnhTrước giờ chúng là chỉ tạo ra những surface rồi vẽ hình lên đó. Tuy nhiên, có những hình phức tạp (một con mario chẳng hạn) thì không thể dùng các hàm để vẽ được, hoặc nếu vẽ được thì rất là phức tạp. Vì thế, người ta phải dùng những file hình ảnh có sẵn để thêm vào trong game. Nào, bây giờ hãy tìm hiểu cách để thêm hình ảnh vào. Để cho đơn giản thì mình sẽ dùng phần code chiếc xe ở phần trước. Mình sẽ thêm hình ảnh chiếc xe vào để thay thế cho các hàm vẽ. Trước hết chúng ta sẽ tìm
hình 1 chiếc xe trước. Hình này mình lụm ở đây và có chỉnh lại cho phù hợp với kích thước Nào, bây giờ chúng ta đến phần code. Các bạn hãy chạy thử đoạn code này nhe!
Kết quả là chiếc xe cũ đã được thay thành 1 hình khác, nhìn thú vị hơn đúng không! Nếu để ý kĩ thì code chỉ thay đổii một chút so với đoạn code cũ. Cụ thể trong hàm khởi tạo
Đây là dòng để thêm hình ảnh vào. pygame.image.load() có tham số truyền vào là đường dẫn đến hình ảnh, ở đây do file ảnh cùng thư mục hiện tại nên không cần đường dẫn đầy đủ. Hàm này có kết quả trả về là
một surface, vì thế có thể sử dụng biến Sự kiệnMột game cần phải có sự tương tác với người chơi. Tất nhiên người chơi game thích điều khiển một chiếc xe hơn là xem nó tự chạy. Vì thế, chúng ta hãy tìm cách để có thể điều khiển được chiếc xe trong đoạn code trên nhe! Ý tưởng là thế này, khi nhấn giữ phím mũi tên trái thì chiếc xe chạy sang trái, khi ấn giữ phím mũi tên phải thì chiếc xe chạy sang phải, đơn giản thế thôi! Đoạn code sau đây sẽ thực hiện điều đó, các bạn hãy gõ vào và chạy thử nhé! À mà các bạn nhớ đặt file car.png lúc nãy vào cùng thư mục nhe!
Đây là kết quả, khi ấn giữ phím mũi tên trái thì xe chạy sang trái, khi ấn giữ phím mũi tên phải thì xe chạy sang phải: Phần này hơi phức tạp tí nên các bạn nhớ chú ý nhe! Bây giờ hãy nhìn vào hàm
Có thêm 2 tham số đó là Có thêm 2 biến được tạo bên ngoài vòng lặp game:
Đây là 2 biến tương ứng được truyền vào
Dòng Dòng Ngoài hai sự kiện KếtQua hai bài hướng dẫn, mình đã giới thiệu cho các bạn những phần cơ bản của pygame và lập trình game. Như mình đã nói từ trước, mình không thể hướng dẫn cho các bạn mọi thứ trong pygame. Điều quan trọng vẫn là khả năng tự tìm hiểu của các bạn. Trong bài hướng dẫn tiếp theo, mình sẽ cùng các bạn làm ra 1 game hoàn chỉnh. Tạm biệt và hẹn gặp lại ở những bài hướng dẫn tiếp theo! |