ここに行く方法は、プログラムでのゴブリン ?(およびその他の文字) の処理を関数から適切なクラスに改善して、内部状態を持つことができるようにすることです。
このような各クラスは、ゲーム フレームごとに更新される変数を持つことができ、カウントが値に達したときにアクションをトリガーします。
このソリューションは、タイミング アカウンティングのためだけに並行スレッドを追加するよりもクリーンであり、適切に実行すると、開発、拡張、および保守が楽になるアプリケーション設計につながる可能性があります。
コードの機能を維持しながら採用できるスタイルの簡単な例。(pygame.sprite.Sprite クラスを使用して、オブジェクト グループごとに「更新」メソッドを自動的に呼び出すことができることに注意してください。以下で最初から行います)
frame_delay = 20
class Goblin(object):
def __init__(self):
self.x = 1 #or whatever
self.y = 1 #or whatever
self.movement_count = 0
self.move_at_each = 10
def move(self):
self.movement_count += 1
if self.movement_count < self.move_at_each:
return
self.movement_count = 0
self.x += 32
メイン ループでは、ゴブリンを次のようにインスタンス化します。
goblin = Goblin()
、 while ループに入る前に、 goblin.move()
各フレームで呼び出します。このようにして、適切なゴブリン クラスを作成できます。これにより、ゲームに複数の「ゴブリン」を含めることができますが、例のコードでは各文字をハード コーディングする必要があります。そして、ゲームの各フレームで「goblin.move」メソッドを呼び出すだけです。上記の例は、10 フレームごとに移動するように調整されていますが、これは変更できます (インスタンス化する個々のゴブリンごとに変更できます)。
私が言ったように、pygame は既にこの種の仕組みのフレームワークとして「スプライト」と「スプライト グループ」クラスを提供していますが、いくつかの小さなゲームで独自のものを展開すると、ニーズと pygame スプライトが既に提供しているものをよりよく理解するのに役立ちます。後のプロジェクト (またはこのプロジェクトの後の段階) でそれらを使用できるようにします。