2012-01-04 12 views
3

この質問は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 

私の質問は、画面がグローバルでないようにこれを行うより良い方法があるかどうかです。ありがとう!

答えて

1

このグローバル設定には特に問題はありますか? とにかくあなたは、オブジェクトののinit()関数の引数として表示面を追加し、この引数にレンダリングすることができます。

は、多分それはpygameのを使用しての私の自身の方法だが、私はほとんどレンダラーのクリア()とドロー()関数を使ってスプライトを使用し、それらをレンダリングします。これらの関数はサーフェス(おそらくスクリーン)変数を要求します。そのため、私の画面はグローバルではありません(正しく覚えていれば)。

2

display.get_surface()あり:

class Particle: 
    def __init__(self, (x, y), size): 
     self.screen = pygame.display.get_surface() 
関連する問題