簡體   English   中英

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

[英]Pygame not returning mouse position in fullscreen mode

嘗試創建一個簡單的代碼,用於在窗口中和全屏時在單擊時注冊鼠標位置。

當前,在窗口模式下(提供光標在窗口上)時將返回正確的值,但是在全屏模式下,無論鼠標位置如何,我都會返回值 800,480(屏幕分辨率)。 這是我的代碼:

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()

雖然@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 文檔。

希望這有幫助!

問題是 pygame 正在獲取以像素為單位的鼠標點擊坐標,該坐標與pygame.display.set_mode()傳遞的分辨率相關。 因此,因為您在全屏顯示時將分辨率設置為 (800, 480),所以它不會為您提供准確的像素坐標。

解決方案?

全屏時傳入真實的顯示器分辨率。 在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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM