簡體   English   中英

在 pyglet 中不使用裝飾器會導致問題嗎?

[英]Does not using a decorator in pyglet cause problems?

我在 pyglet 中編寫了一個簡單的代碼來在屏幕上繪制一個矩形,但是當我使用正確的代碼格式時,什么也沒有發生,但也沒有拋出任何錯誤

window=pyglet.window.Window()
rect=pyglet.shapes.Shapes(0,0,50,50,color=(255,255,255))
@window.event
def draw_():
    rect.draw()
pyglet.app.run()

此代碼只會導致黑屏。 矩形未打印,但如果我使用此代碼代替

window=pyglet.window.Window()
rect=pyglet.shapes.Shapes(0,0,50,50,color=(255,255,255))
    
def draw_():
    rect.draw()
pyglet.app.run()

矩形被打印出來。 由於第二個代碼不是在 pyglet 中繪制形狀的標准方法,我想知道這樣做是否有任何問題(性能問題、故障等)如果第二個代碼錯誤,我應該怎么做?

重繪事件是on_draw()而不是draw_

@window.event
def on_draw():
    rect.draw()

如果您不使用裝飾器,則默認事件處理程序將被完全替換:

 def on_draw(): rect.draw()

當您使用裝飾時,會添加一個額外的事件處理程序。 因此保留默認處理程序:

 @window.event def on_draw(): rect.draw()

請參閱PyGlet - 設置事件處理程序

[...] 最簡單的方法是將事件處理程序直接附加到 object 上的相應屬性。 這將完全取代默認的事件處理程序。 [...]

[...] 如果您不想替換默認事件處理程序,而是想添加一個額外的事件處理程序,pyglet 提供了使用事件裝飾器的快捷方式。 您的自定義事件處理程序將運行,然后是默認事件處理程序。 [...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM