0

pyglet.clock モジュールの Clock クラスをサブクラス化したいのですが、schedule_interval を使用する際に問題が発生します。

次のコードは何も出力せず、オブジェクト c はまったくチェックされていない場合のように見えます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pyglet

class Clock(pyglet.clock.Clock):
    def __init__(self):
        super(Clock, self).__init__()

class Test(object):
    def update(self, dt):
        print dt

w = pyglet.window.Window()
@w.event
def on_draw():
    w.clear()

t = Test()

c = pyglet.clock.Clock()
c.schedule_interval(t.update, 1/60.0)

pyglet.app.run()

しかし、次はうまくいきます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pyglet

class Clock(pyglet.clock.Clock):
    def __init__(self):
        super(Clock, self).__init__()

        pyglet.clock.set_default(self)

class Test(object):
    def update(self, dt):
        print dt

w = pyglet.window.Window()
@w.event
def on_draw():
    w.clear()

t = Test()

c = Clock()
c.schedule_interval(t.update, 1/60.0)

pyglet.app.run()

唯一の違いは、Clock のコンストラクター メソッドの pyglet.clock.set_default(self) 文です。

これは明確ではないか、少なくとも pyglet.clock.Clock をサブクラス化して独自の派生 Clock クラスを持つ最良の方法ではないと思います。

質問:

Pyglet でデフォルトの時計を自動的に設定する方法はありますか?

よりエレガントまたはpythonicなソリューションはありますか?

pyglet.clock.set_default(self) 行なしでこれを行うことは可能ですか?

4

1 に答える 1