同事对 pygame 中的特定 window 做出反应

Assosiate rects to specific window in pygame

在我的程序中我定义了主屏幕。该程序将通过单击不同的 btn 来发送新的 window。

我想知道是否可以定义许多 windows 并根据新的 windows 位置将对象坐标关联到它们。

换句话说,如果可以为与新 window

相关的对象编辑“轴的起点”

例如:

the new window will apeare from x0,y0 = 100,0 - x1,y1 = 900,800

我粘贴了相关行供您查看。

#before main loop start (this display updating by running in main loop)
screen = screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))

# after main loop start when btn clicked on it
new_window= pygame.Surface((w,h))

#in main loop i use
screen.blit(new_window,(x,y))

如果我创建一个新的矩形为

window_rect = pygame.Rect(x,y,w,h)

它根据屏幕坐标为 window_rect 定义 x,y 坐标,而不是为新的 window。我如何将新的矩形与新的 window 相关联?(因此新的矩形坐标将根据 new_window)

注意:我知道我可以利用新的 window:

pygame.draw.rect(new_window,color,(window_rect)

这样它使用新的 window 坐标进行绘制。但是我需要根据 new window 为其他函数定义 rect

i want to create a rect in the new window but not according to screen cords but according to new_window cords where "The beginning of the axes" is the top left of that window.

很遗憾,Pygame 中没有这样的功能。您必须自己计算 window 坐标。您可以使用 pygame.Rect.move.

执行此操作

例如::如果你有一个带有矩形sub_window_rect的subwindow并且你在subwindow rect_in_sub_window中有一个矩形:

sub_window_rect = pygame.Rect(100, 0, 800, 800)
rect_in_sub_window = pygame.Rect(10, 10, 100, 100)

rect_in_window = rect_in_sub_window.move(*sub_window_rect.topleft)

rect_in_window左上坐标为(110, 10).

从 window 坐标转换为子 window 坐标:

rect_in_sub_window = rect_in_window.move(
    -sub_window_rect.left, -sub_window_rect.top)