Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame在全屏模式下不返回鼠标位置_Python_Pygame_Mouseevent_Fullscreen - Fatal编程技术网

Python Pygame在全屏模式下不返回鼠标位置

Python Pygame在全屏模式下不返回鼠标位置,python,pygame,mouseevent,fullscreen,Python,Pygame,Mouseevent,Fullscreen,尝试创建一个简单的代码,当在窗口中以及在全屏中单击时注册鼠标位置 当前,在窗口模式下(如果光标位于窗口上方),将返回正确的值,但在全屏模式下,无论鼠标位置如何,我都返回值800480(屏幕分辨率)。这是我的密码: import pygame windowwidth = 800 windowheight = 480 pygame.init() pygame.display.init() screen = pygame.display.set_mode((windowwidth, windowhe

尝试创建一个简单的代码,当在窗口中以及在全屏中单击时注册鼠标位置

当前,在窗口模式下(如果光标位于窗口上方),将返回正确的值,但在全屏模式下,无论鼠标位置如何,我都返回值800480(屏幕分辨率)。这是我的密码:

import pygame

windowwidth = 800
windowheight = 480
pygame.init()
pygame.display.init()
screen = pygame.display.set_mode((windowwidth, windowheight))
pygame.display.flip()

running = 1
while running:
    LEFT = 1
    event1 = pygame.event.get()
    for event in event1:
         if event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT:
              print(event.pos)
         if event.type == pygame.KEYDOWN:
              if event.key == pygame.K_f:
                   pygame.display.set_mode((800,480), pygame.FULLSCREEN)
              if event.key == pygame.K_g:
                   pygame.display.set_mode((800, 480))
              else:
                   break

    pygame.display.flip()

问题是pygame正在获取其鼠标单击坐标(以像素为单位),这与在
pygame.display.set_mode()
中传递的分辨率有关。因此,当它全屏显示时,由于您将分辨率设置为(800480),因此无法提供准确的像素坐标

解决方案是什么

全屏显示时,输入真实显示器分辨率。在pygame中,如果您传入(0,0)作为分辨率,pygame将为您创建全屏分辨率

因此,在这个特殊的屏幕大小和全屏标志传递,这就是它!代码现在可以工作了

我希望这个答案对你有帮助!如果您还有任何问题,请在下面发表评论

import pygame

windowwidth = 0
windowheight = 0
pygame.init()
pygame.display.init()
screen = pygame.display.set_mode((windowwidth, windowheight))
pygame.display.flip()

running = 1
while running:
    LEFT = 1
    event1 = pygame.event.get()
    for event in event1:
         if event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT:
              print(event.pos)
         if event.type == pygame.KEYDOWN:
              if event.key == pygame.K_f:
                   pygame.display.set_mode((0,0), pygame.FULLSCREEN)
              if event.key == pygame.K_g:
                   pygame.display.set_mode((800, 480))
              else:
                   break    

    pygame.display.flip()

虽然@Michael O'Dwyer的回答就足够了,但除了他对预先确定PyGame窗口画布大小的澄清外,您还可以使用
PyGame.display.Info()
方法自动检测系统的宽度和高度,以提高清晰度。以下是自动检测宽度和高度的代码:

import pygame

# Initialize Pygame
pygame.init()

# Get system display information
displayInfo = pygame.display.Info()
windowwidth = displayInfo.current_w
windowheight = displayInfo.current_h

# Commented out - No need to reinitialize other Pygame modules
# after pygame.init() is called
# pygame.display.init()

screen = pygame.display.set_mode((windowwidth, windowheight))
pygame.display.flip()

running = 1
while running:
    LEFT = 1
    for event in pygame.event.get():
         if event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT:
              print(event.pos)
         if event.type == pygame.KEYDOWN:
              if event.key == pygame.K_f:
                   pygame.display.set_mode((windowwidth, windowheight), pygame.FULLSCREEN)
              if event.key == pygame.K_g:
                   pygame.display.set_mode((800, 480))
              else:
                   break

    pygame.display.flip()
是PyGame.display.Info()方法的PyGame文档


希望这有帮助

不幸的是,即使在这次修正之后,一切都没有改变!问题可能是由于显示背景图像导致的吗?如果您运行答案中给出的确切代码,它是否正确注册鼠标位置?我刚刚再试了一次,我可以确认它是有效的。这里的代码是有效的,但是我的完整程序和套接字没有。现在添加组件以找出问题所在也许我将鼠标设置为不可见的位置放错了,但这100%导致了我的问题。真奇怪!不幸的是,我在注册鼠标方面仍然没有多少运气positions@Jkind9代码按预期工作。鼠标位置的注册是以什么方式关闭的?当我在全屏模式下单击屏幕时,无论我在哪里单击,它只记录800480的位置