ちょうど楽しみのために、私はPython/Tkinterで古典的なヘビゲームを実装しようとしました。それは非常に遅れていると感じ、私はそれを修正することができますかどうか、私は非常に確かではありません。私は、プログラムの短い概要を与えることを試みる:Tkinterで円滑に動作するスネークゲームを書くことはできますか?
私が最初にキャンバスを構築し、私は、各矢印キーのイベントハンドラを追加します。
root = self.root = Tk()
canvas = Canvas(root, width = width, height = height)
canvas.pack()
canvas.bind("<Left>", on_left) # on_left is a very short function
私もタイムステップのための機能を持っています。グラフィックをペイントし、再び呼び出されるようにスケジュールを設定します。私は20のフレームにinterval
0.05周りtimestep()
中(等価選択したときでさえ
- :今
def timestep(self): # draw the graphics here (about 100 filled rectangles) timer = threading.Timer(interval, timestep) timer.start()
、私は2つの問題を抱えている:それは100枚の長方形たびに再描画などの機能は、非常に効率的ではありません毎秒3〜5フレーム以上は得られません。
- キーボードからの制御入力が約0.5秒遅れているようです。
が、それはあなたが100枚の長方形たびにステップを描きたいときTkinterのキャンバスとのスムーズな、非遅れ(20 FPS)蛇を書くことで、すべてのことが可能です:
は、私は約3つのことを疑問に思います?
threading.Timer
はタイムステップ機能を呼び出す正しい選択ですか?なぜキーボード入力が遅れているようですか?
各フレーム間でcanvas.delete(...)を使用していない場合、メモリリークが発生します。 100個の四角形はわずか200個の三角形です(それほど多くはないが、ゲームエンジンは60+ fpsで何百万ということができます) – kpie
各ステップで100個の四角形を作成する理由を尋ねますか? – TigerhawkT3
'self.parent.after(interval、timestep)'はおそらくもっと簡単で簡単です。問題を再現できるだけのコードを表示できますか? – TigerhawkT3