Pygame显示位置
我需要在创建一个pygame窗口后,获取这个窗口的位置:
window = pygame.display.set_mode((width, height), 0, 32)
pygame.init()
默认情况下,窗口的位置是(0,0) - 但是如果用户移动了窗口,我也需要知道新的x和y坐标。有什么好办法吗?
10 个回答
9
这里有一段示例代码,它可以返回所有四个角的位置:
from ctypes import POINTER, WINFUNCTYPE, windll
from ctypes.wintypes import BOOL, HWND, RECT
# get our window ID:
hwnd = pygame.display.get_wm_info()["window"]
# Jump through all the ctypes hoops:
prototype = WINFUNCTYPE(BOOL, HWND, POINTER(RECT))
paramflags = (1, "hwnd"), (2, "lprect")
GetWindowRect = prototype(("GetWindowRect", windll.user32), paramflags)
# finally get our data!
rect = GetWindowRect(hwnd)
print "top, left, bottom, right: ", rect.top, rect.left, rect.bottom, rect.right
# bottom, top, left, right: 644 98 124 644
12
我需要获取pygame窗口的x和y坐标——可以是在窗口启动时,也可以是在窗口移动时。后者是个加分项。
我已经找到了如何把pygame窗口放在屏幕底部居中的方法:
pos_x = screen_width / 2 - window_width / 2
pos_y = screen_height - window_height
os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (pos_x,pos_y)
os.environ['SDL_VIDEO_CENTERED'] = '0'
背景是,我有一些与屏幕相关的x和y坐标,我必须把这些屏幕坐标转换成窗口内部的坐标,这样我才能在pygame窗口里显示这些坐标,或者把那些在pygame窗口外的坐标给丢掉。
通过我上面的方法,我知道了窗口的初始位置。但是我只能使用一个pygame窗口(因为它总是在同一个位置),如果用户移动了窗口,事情就会出错。
14
这个方法对我有效:
import os
import pygame
x = 100
y = 45
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)
pygame.init()
screen = pygame.display.set_mode((100,100))