Как определить щелчки на сенсорном экране в Python?

avatar
Vickash Bharttiya
2 сентября 2021 в 04:04
505
1
1

Как я могу определить прикосновение к изображению в pygame на сенсорном экране? Я искал, но не могу найти, как определить прикосновение к конкретному изображению.

Источник
Jan Wilamowski
2 сентября 2021 в 04:10
1

Вы читали документацию?

Vickash Bharttiya
2 сентября 2021 в 04:34
0

да, я читал, но не понимаю, так как я новичок в python.

Jan Wilamowski
2 сентября 2021 в 04:47
0

Я предлагаю вам сначала сосредоточиться на основах pygame (отображение изображений, ввод данных с помощью мыши, обнаружение столкновений), а затем перейти к взаимодействию с сенсорным устройством.

Vickash Bharttiya
2 сентября 2021 в 04:51
0

Я делаю игру с птицами, но чтобы она работала на Android, мне нужно обнаруживать прикосновение

Jan Wilamowski
2 сентября 2021 в 04:58
0

Если вы никогда даже не использовали Python, не говоря уже о сенсорном вводе, этот проект может оказаться слишком сложным. Начните с чего-то меньшего и простого, помня о своей конечной цели. Все, что я перечислил ранее, необходимо будет изучить, помимо прочего.

Vickash Bharttiya
2 сентября 2021 в 04:59
0

Я сделал игру flappy bird для ноутбука

Jan Wilamowski
2 сентября 2021 в 05:01
0

Если вы уже знаете, как использовать pygame и читаете документацию, то в чем именно заключается ваш вопрос? Вы описали конкретную проблему с вашим кодом, чтобы найти здесь помощь.

Vickash Bharttiya
2 сентября 2021 в 05:07
0

Я спрашиваю, есть ли простой способ узнать, коснулись ли изображения

Community
5 сентября 2021 в 10:35
0

Измените вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы найти адекватный ответ.

Ответы (1)

avatar
Rabbid76
2 сентября 2021 в 15:03
1

Чтобы определить, касались ли изображения, вы можете использовать событие MOUSEBUTTONDOWN. См. Обнаружение щелчка мышью Pygame.

Загрузите изображение с помощью pygame.image.load(). Обведите ограничивающий прямоугольник (pygame.Rect). Создайте pygame.Mask из изображения с помощью pygame.mask.from_surface:

image = pygame.image.load('image.png').convert_alpha()
image _rect = image.get_rect(topleft = (x, y))
image_mask = pygame.mask.from_surface(image)

Используйте событие MOUSEBUTTONDOWN, чтобы определить, был ли нажат мышь в прямоугольной области изображения. Проверьте, установлен ли соответствующий бит в маске изображения:

for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        image_x, image_y = event.pos[0] - image_rect.x, event.pos[1] - image_rect.y
        if image_rect.collidepoint(event.pos) and image_mask.get_at((image_x, image_y)):
            print("touched")

Минимальный пример:

import pygame

pygame.init()
window = pygame.display.set_mode((400, 400))
font = pygame.font.SysFont(None, 100)
clock = pygame.time.Clock()
text = font.render("Text", True, (255, 255, 0))

bomb = pygame.image.load('Bomb-256.png').convert_alpha()
bomb_rect = bomb.get_rect(center = window.get_rect().center)
bomb_mask = pygame.mask.from_surface(bomb)
click_count = 0
click_text = font.render('touch: ' + str(click_count), True, "black")

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 
        if event.type == pygame.MOUSEBUTTONDOWN:
            image_x, image_y = event.pos[0] - bomb_rect.x, event.pos[1] - bomb_rect.y
            if bomb_rect.collidepoint(event.pos) and bomb_mask.get_at((image_x, image_y)):
                click_count += 1
                click_text = font.render('touch: ' + str(click_count), True, "black")

    window.fill((255, 255, 255))
    window.blit(bomb, bomb_rect)
    window.blit(click_text, click_text.get_rect(topleft = (20, 20)))
    pygame.display.flip()

pygame.quit()
exit()