Cách làm việc với đầu vào cảm ứng trong PyGame

Cách làm việc với đầu vào cảm ứng trong PyGame

Chia sẻ kiến thức 04/06/2023

Với sự hỗ trợ của Pygame cho cả đầu vào bằng chuột và cảm ứng, bạn có thể tạo ra các game hấp dẫn với đầu vào cảm ứng.

Trong thời đại ngày nay, các thiết bị màn hình cảm ứng có mặt ở khắp mọi nơi. Ngày càng nhiều nhà phát triển game sử dụng đầu vào cảm ứng trong game của họ và các framework đang làm cho điều này dễ dàng hơn.

PyGame giúp tạo các trò chơi và ứng dụng có thể tận dụng đầu vào cảm ứng một cách dễ dàng.

Hỗ trợ cảm ứng của PyGame

PyGame có hỗ trợ tích hợp để làm việc với đầu vào cảm ứng, bao gồm hỗ trợ cho đầu vào cảm ứng chuột và ngón tay.

 

Để phát hiện chuột, bạn có thể sử dụng các sự kiện pygame.MOUSEBUTTONDOWN và pygame.MOUSEBUTTONUP. Ví dụ:

for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        print("Mouse button pressed")

Để phát hiện đầu vào chạm bằng ngón tay, bạn có thể sử dụng các sự kiện pygame.FINGERDOWN và pygame.FINGERUP. Ví dụ:

for event in pygame.event.get():
    if event.type == pygame.FINGERDOWN:
        print("Finger touched the screen")

Tạo một game đơn giản

Bạn có thể tìm thấy tất cả code trong GitHub Repo này .

Bắt đầu bằng cách tạo một game đơn giản. Trò chơi này sẽ bao gồm một nhân vật người chơi (player) mà bạn có thể di chuyển xung quanh màn hình bằng cách sử dụng đầu vào cảm ứng. Để làm điều này, bạn sẽ cần tạo một vòng lặp trò chơi và một nhân vật player.

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên thiết bị của mình, sau đó sử dụng lệnh sau để cài đặt mô-đun PyGame:

pip install pygame

Bây giờ, hãy nhập mô-đun PyGame vào code game của bạn:

import pygame
pygame.init()

Sau đó, tạo cửa sổ game và một đối tượng game:

# Set up the display
size = (400, 400)
screen = pygame.display.set_mode(size)

# Create a player object
player = pygame.Surface((50, 50))
player.fill((255, 0, 0))

# Set the initial position of the player
player_pos = [175, 175]

Cuối cùng, tạo vòng lặp trò chơi:

# The game loop
running = True
while running:
    # Check for events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Update the player position
    player_pos[0] += 5
    player_pos[1] += 5

    # Draw the player
    screen.blit(player, player_pos)

    # Update the display
    pygame.display.update()

Đầu vào cảm ứng chuột cho chuyển động của người chơi

Bây giờ bạn bạn có thể bắt đầu thêm đầu vào cảm ứng. Để làm điều này, bạn sẽ cần thêm một trình xử lý sự kiện (event handler) cho các đầu vào chuột. Thêm các sự kiện pygame.MOUSEBUTTONDOWN và pygame.MOUSEBUTTONUP vào vòng lặp trò chơi.

 

Tạo event handler cho đầu vào chuột. Khi người chơi nhấn nút chuột, cập nhật vị trí của nhân vật thành vị trí chuột hiện tại. Chương trình sẽ bỏ qua việc nhả nút chuột vì nó không cần thực hiện bất kỳ hành động nào trong trường hợp đó.

# The game loop
running = True
while running:
    # Check for events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # Check for mouse inputs
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = event.pos
            player_pos[0] = mouse_x
            player_pos[1] = mouse_y
        elif event.type == pygame.MOUSEBUTTONUP:
            pass
    
    screen.fill((0, 0, 0))

    # Draw the player
    screen.blit(player, player_pos)

    # Update the display
    pygame.display.update()

Bạn cũng có thể thêm logic bổ sung vào event handler để làm cho player di chuyển theo phản ứng với đầu vào của chuột.

Đầu vào cảm ứng ngón tay cho chuyển động của người chơi

Ngoài đầu vào chuột, bạn cũng có thể thêm đầu vào cảm ứng ngón tay. Để thực hiện việc này, bạn sẽ cần thêm event handler cho các đầu vào chạm bằng ngón tay.

Thêm các sự kiện pygame.FINGERDOWN và pygame.FINGERUP vào vòng lặp trò chơi:

# The game loop
running = True
while running:
    # Check for events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # Check for mouse inputs
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = event.pos
            player_pos[0] = mouse_x
            player_pos[1] = mouse_y
        elif event.type == pygame.MOUSEBUTTONUP:
            pass
        # Check for finger inputs
        elif event.type == pygame.FINGERDOWN:
            finger_x, finger_y = event.pos
            player_pos[0] = finger_x
            player_pos[1] = finger_y
        elif event.type == pygame.FINGERUP:
            pass

    screen.fill((0, 0, 0))
    
    # Draw the player
    screen.blit(player, player_pos)

    # Update the display
    pygame.display.update()

Bạn sẽ thấy nó cũng tương tự như event handler cho đầu vào chuột. Event handler này cập nhật vị trí của nhân vật khi người chơi nhấn ngón tay trên màn hình. Khi ngón tay rời màn hình, không có gì xảy ra. Điều này cho phép bạn tạo một game mà bạn có thể điều khiển bằng cách sử dụng cả đầu vào bằng chuột và chạm ngón tay. Hãy nhớ rằng bạn cũng có thể sử dụng các sự kiện khác chẳng hạn như pygame.FINGERMOTION để phản hồi với chuyển động của ngón tay.

 

Các tính năng cảm ứng bổ sung của Pygame

Với các tính năng cảm ứng cơ bản đã có, bạn có thể bắt đầu thêm các tính năng nâng cao hơn. PyGame có một vài tính năng tích hợp có thể giúp bạn thêm nhiều tính năng cảm ứng hơn vào game của mình.

Tính năng đầu tiên là hàm pygame.mouse.set_visible() cho phép bạn ẩn con trỏ chuột. Điều này có thể hữu ích nếu bạn muốn tạo game chỉ sử dụng đầu vào cảm ứng chứ không phải chuột.

Đây là một ví dụ về cách sử dụng hàm set_visible():

pygame.mouse.set_visible(False)

Hàm pygame.mouse.set_pos() đặt con trỏ chuột tới một vị trí cụ thể trên màn hình. Điều này hữu ích nếu bạn muốn di chuyển chuột đến một vị trí cụ thể mà không cần sử dụng đầu vào của chuột.

Dưới đây là một ví dụ về cách sử dụng hàm set_pos():

pygame.mouse.set_pos(200, 200)

Bạn có thể sử dụng hàm pygame.mouse.get_rel() để lấy chuyển động tương đối của chuột. Điều này để phát hiện xem con chuột đã di chuyển bao xa kể từ sự kiện chuột cuối cùng.

Đây là cách bạn có thể sử dụng hàm get_rel():

dx, dy = pygame.mouse.get_rel()

Cuối cùng, bạn có thể sử dụng hàm pygame.mouse.get_pressed( ) để kiểm tra xem người chơi có nhấn nút chuột nào không. Điều này có thể hữu ích khi tạo game bằng điều khiển chuột/cảm ứng.

 

Dưới đây là một ví dụ về cách sử dụng hàm get_press() :

mouse_buttons = pygame.mouse.get_pressed()

Tạo game hấp dẫn với đầu vào cảm ứng

Với đầu vào cảm ứng tại chỗ, giờ đây bạn có thể tạo các gametương tác. Ví dụ: bạn có thể tạo game trong đó người chơi có thể di chuyển xung quanh màn hình bằng cách sử dụng đầu vào cảm ứng. Bạn cũng có thể tạo các game dựa trên cử chỉ, trong đó người chơi có thể thực hiện các cử chỉ khác nhau để kích hoạt các hành động trong trò chơi. Khả năng là vô tận. Với sự trợ giúp của PyGame, bạn có thể tạo các trò chơi vừa thú vị vừa có tính tương tác.

Tìm hiểu các khóa học lập trình của FUNiX tại đây:

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/pygame-touch-inputs-working-with/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại