如何避免全局屏幕变量?

时间:2012-01-04 01:17:35

标签: screen global pygame

这个问题是在Pygame的背景下提出的,但我想知道任何类型的图形编程都有一个很好的解决方案。

因此,无论何时编写图形程序,通常都会有一个屏幕变量,用于显示正在显示的屏幕数据。我看到的所有示例都将此变量设置为全局,以便所有其他对象也可以轻松访问,例如下面的简单示例。

import pygame

background_colour = (255,255,255)
(width, height) = (300, 200)

class Particle:
    def __init__(self, (x, y), size):
        self.x = x
        self.y = y
        self.size = size
        self.colour = (0, 0, 255)
        self.thickness = 1

    def display(self):
        pygame.draw.circle(screen, self.colour, (self.x, self.y), self.size, self.thickness)

screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Tutorial 2')
screen.fill(background_colour)

my_first_particle = Particle((150, 50), 15)
my_first_particle.display()

pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

我的问题是,是否有更好的方法可以使屏幕不是全局的。谢谢!

2 个答案:

答案 0 :(得分:2)

display.get_surface()

class Particle:
    def __init__(self, (x, y), size):
        self.screen = pygame.display.get_surface()

答案 1 :(得分:1)

这种全球化是否有任何具体问题? 无论如何,您可以将显示表面添加为对象的 init ()函数的参数,并渲染到此参数。

也许这只是我自己使用pygame的方式,但我主要使用sprite,并通过渲染器的clear()和draw()函数渲染它们。这些函数要求表面(可能是屏幕)变量,这样我的屏幕就不是全局的(如果我没记错的话)。