2011-09-08 2 views
5

私はパイゲームで単純なゲームを作っていました。マーカ、カウント、そしてあらゆる種類のグローバルスタッフが必要です。だから私は、クラスを定義し、このようにそれを使用することにしました:グローバル変数のコンテナとしてクラスを使用する必要があります

class Staff(): 
    def __init__(self): 
     self.modes={'menu':True,'spawning':False,'sprite_change':False} 
     self.timer=pygame.time.Clock() 
     self.tick_count=0 

と私のゲームループの中で、私はちょうど私のすべての機能を1つの変数を与える:

def main_loop(): 
    staff=Staff() 
    while not done: 
     update_positions(staff) 
     clear_background(staff) 
     draw_sprites(staff) 

私はこの方法が動作し、非常にされて知っています私にとっては便利ですが、これがゲームのスピードにどのように影響するのでしょうか、恐ろしいことをしているのでしょうか? 回答に感謝します。

答えて

2

自分の好意を持ってデザインを考え直してください。

まず、グローバル変数を使用する方が簡単だと思うかもしれません。値を渡すことができ、パラメータを使用して値を渡すことなく、すべての関数から値にアクセスできます。しかし、デバッグやエラーの発見や、しばらくしてからあなたのコードを調べることになると、グローバル変数は悪夢に変わります。これらの変数が他の関数やクラスに影響を与える場所を簡単に忘れるからです。だから、あなた自身の好意を持ち、あなたのデザインを考え直してください。

「グローバル」変数のための良い場所は、たとえばメインクラスまたは関数です。すべてが始まる場所。私はいくつかのものが永久に繰り返されるループがあると思います。そこから特定のクラスや関数に渡すことができます。あなたのアーキテクチャはわかりませんが、グローバル変数を持つことはまれです。

+1

知恵の言葉をありがとう、私はそれらを取り除こうとします。 – HamsteR

+0

コード(時間やメモリスペースなど)を最適化しようとしている場合、常に行うべきことが1つあります。測定。巨大な改善がない場合は、より分かりやすいバージョンを使用してください! – Thikron

1

私はPythonをまったく知らないのですが、一般的にグローバルは悪い考えです。私はシングルトンパターンを提案する。それは最高のアイデアではありませんが、確かにグローバルよりも優れています。 Python and the Singleton Pattern

それ以外はあなたのアプローチはうまくいくようです。

関連する問題