PyGame任何触摸屏

2024-04-19 18:55:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个简单的程序,在这个程序中,用户可以用手指(在触摸屏上)在屏幕上移动形状。在

这是我目前为止的代码:

import pygame


def main():
    pygame.init()
    DISPLAY = pygame.display.set_mode((1000,500),0,32)
    WHITE = (255,255,255)
    blue = (0,0,255)
    DISPLAY.fill(WHITE)
    pygame.mouse.set_visible(False)
    pygame.draw.rect(DISPLAY, blue,(480,200,50,250))
    pygame.display.update()
    pygame.mouse.set_pos(480, 200)
    while True:
        for event in pygame.event.get():
            pos = pygame.mouse.get_pos()
            pygame.draw.rect(DISPLAY, blue, (pos[0]-25,pos[1], 50, 250))
            pygame.display. update()
            DISPLAY.fill(WHITE)
main()

问题是当我触摸屏幕时,除非我移动手指,否则什么都不会发生。如果我打印事件,我可以看到没有事件列出,直到我开始移动我的手指,所以这可能是原因。在

我希望能够在屏幕上注册手指按下(我猜是一个事件),甚至在它开始移动之前,有没有用PyGame来做这个呢?在

谢谢。在


Tags: pos程序屏幕maindisplay事件bluefill
2条回答

我已经做了一个游戏,利用电脑触摸屏和管理触摸相当好地处理两种类型的事件。一个是pygame.MOUSEMOTION,另一个是pygame.MOUSEBUTTONDOWN。它们都包含属性event.pos。问题是,至少在我的触摸屏(Lenovo)中,最初的触摸没有被pygame的事件处理程序注册。在

您可以通过在触摸屏幕的同时将所有事件打印到终端来确认这一点。在松开或移动手指之前,我什么都得不到,但在释放时,我得到事件pygame.MOUSEBUTTONDOWN,后面紧跟着pygame.MOUSEBUTTONUP。在

我知道这并不能真正解决你的问题,但它也许能在某种程度上帮助你。否则,请查看Kivy。可能有解决办法。在

import pygame

def main():
    pygame.init()
    DISPLAY = pygame.display.set_mode((1000,500),0,32)
    WHITE = (255,255,255)
    blue = (0,0,255)
    DISPLAY.fill(WHITE)
    pygame.mouse.set_visible(False)
    pygame.draw.rect(DISPLAY, blue,(480,200,50,250))
    pygame.display.update()
    pygame.mouse.set_pos(480, 200)
    while True:
        for event in pygame.event.get():
            if event.type == MOUSEBUTTONDOWN or event.type == MOUSEMOTION:
                pos = event.pos
            pygame.draw.rect(DISPLAY, blue, (pos[0]-25,pos[1], 50, 250))
            pygame.display. update()
            DISPLAY.fill(WHITE)
main()

如果以后有人遇到这个问题,在PyGame2中有更好的触摸支持。您可以使用安装

pip install pygame==2.0.0.dev6

(查看pygamegithub的最新版本)有三种新的事件类型。pygame.FINGERDOWNpygame.FINGERUP和{}。当触摸屏幕时,pygame.FINGERUP事件注册触摸输入,而不是像pygame.MOUSEBUTTONDOWN那样释放屏幕时

相关问题 更多 >