我正在尝试创建一个简单的程序,用户可以在其中使用手指(在触摸屏上)移动屏幕上的形状。
到目前为止,这是我的代码:
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()
Run Code Online (Sandbox Code Playgroud)
问题是,当我触摸屏幕时,除非我移动手指,否则什么都不会发生。如果我打印事件,我可以看到在我开始移动手指之前没有列出任何事件,所以这可能就是原因。
我希望能够在屏幕开始移动之前在屏幕上注册手指按下(我猜是一个事件),有没有办法使用 PyGame 来做到这一点?
谢谢。
小智 8
以防万一有人后来偶然发现这个问题,在 pygame 2 中有更好的触摸支持。您可以安装
pip install pygame==2.0.0.dev6
Run Code Online (Sandbox Code Playgroud)
(查看 pygame github 的最新版本)并且存在三种新的事件类型。pygame.FINGERDOWN,pygame.FINGERUP, 和pygame.FINGERMOTION。该pygame.FINGERUP事件在触摸屏幕时立即注册触摸输入,而不是像释放屏幕时那样pygame.MOUSEBUTTONDOWN
小智 5
我制作了一款利用计算机触摸屏的游戏,并通过处理两种类型的事件来很好地管理触摸。一个是pygame.MOUSEMOTION,另一个是pygame.MOUSEBUTTONDOWN。它们都包含属性event.pos。问题是,至少在我的触摸屏(联想)上,初始触摸没有被 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()
Run Code Online (Sandbox Code Playgroud)