Как избежать глобальной экранной переменной? - PullRequest
3 голосов
/ 04 января 2012

Этот вопрос задается в контексте 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 ]

2 голосов
/ 26 февраля 2012

Есть display.get_surface():

class Particle:
    def __init__(self, (x, y), size):
        self.screen = pygame.display.get_surface()
1 голос
/ 05 января 2012

Есть ли какая-то конкретная проблема с этим глобальным? В любом случае вы можете добавить поверхность дисплея в качестве аргумента для функции init () ваших объектов и отобразить этот аргумент.

Может быть, это просто мой собственный способ использования pygame, но я в основном использую спрайты и отрисовываю их через функции clear () и draw () рендерера. Эти функции запрашивают переменную поверхности (возможно, экранную), чтобы мой экран не был глобальным (если я правильно помню).

...