[英]Pyglet not calling on_draw
I'm trying to make a simple game but I'm having issues我正在尝试制作一个简单的游戏,但我遇到了问题
this is my code:这是我的代码:
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()
problem is on_draw
event is only called when I input something on keyboard问题是
on_draw
事件仅在我在键盘上输入内容时调用
I'm using python 3.6 and latest pyglet package我正在使用 python 3.6 和最新的 pyglet 包
I found nothing on internet why is this happening?我在互联网上什么也没找到,为什么会发生这种情况?
Pyglet invokes on_draw
only if an event occurs. Pyglet 仅在事件发生时调用
on_draw
。 Use pyglet.clock.schedule_interval
to continuously invoke a function by a timer invent.使用
pyglet.clock.schedule_interval
通过计时器发明连续调用函数。 That causes that on_draw
is triggered, too:这
on_draw
导致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()
It could be an issue with the decorator function.这可能是装饰器功能的问题。
Instead of decorating the on_draw
, replace the window object's on_draw
function with your own declaration of that function:不要装饰
on_draw
,而是用您自己的函数声明替换 window 对象的on_draw
函数:
See this example on on_mouse_press
, which is replced with its own declaration.请参阅
on_mouse_press
上的此示例,该示例已替换为自己的声明。
@window.event
def on_mouse_press(x, y, button, modifiers):
global state, image
if button == pyglet.window.mouse.LEFT:
print('mouse press')
if state:
state = False
else:
state = True
Replaced to替换为
import pyglet
image = pyglet.resource.image('test.png')
image.anchor_x = image.width // 2
image.anchor_y = image.height // 2
state = True
def on_draw():
print('on_draw() called')
window.clear()
if state:
image.blit(window.width // 2, window.height // 2)
def on_mouse_press(x, y, button, modifiers):
global state
print('mouse pressed')
if state:
state = False
else:
state = True
window = pyglet.window.Window()
window.on_draw = on_draw
window.on_mouse_press = on_mouse_press
pyglet.app.run()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.