首页 > 解决方案 > Pyglet 没有调用 on_draw

问题描述

我正在尝试制作一个简单的游戏,但我遇到了问题

这是我的代码:

from myvector import myVector
from car import Car
import pyglet


width = 1000
height = 600
agent = None
agent = Car(int(width/2), int(height/2))
window = pyglet.window.Window()
window.set_size(width,height)


@window.event
def on_key_press(symbol, modifiers):
    if symbol == 119:  # w
        agent.applyForce(myVector(-1, 0))
    if symbol == 115:  # s
        agent.applyForce(myVector(1, 0))
    if symbol == 97:  # a
        agent.applyForce(myVector(0, -1))
    if symbol == 100:  # d
        agent.applyForce(myVector(0, 1))


@window.event
def on_draw():
    window.clear()
    agent.update()
    agent.sprite.draw()
    print(1)


if __name__ == "__main__":
    pyglet.app.run()

问题是on_draw只有当我在键盘上输入内容时才会调用事件

我正在使用 python 3.6 和最新的 pyglet 包

我在网上一无所获,为什么会这样?

标签: pythonpython-3.xpyglet

解决方案


Pygleton_draw仅在事件发生时调用。用于pyglet.clock.schedule_interval由计时器发明连续调用函数。这on_draw也导致触发:

@window.event
def on_draw():
    window.clear()
    agent.update()
    agent.sprite.draw()
    print(1)

def update(dt):
    # update objects
    # [...]
    pass

if __name__ == "__main__":
    pyglet.clock.schedule_interval(update, 1/60) # schedule 60 times per second
    pyglet.app.run()

推荐阅读