2017-10-07 109 views
0

我在tkinter中創建了一個遊戲,爲了避免我在上一次遊戲中遇到的滯後問題,我想分開邏輯和圖形循環,因爲圖形更多CPU密集。爲了創建兩個循環,我使用了.after循環,因爲在過去我已經成功地將它們用作控制循環。我給了邏輯循環10毫秒的延遲時間,圖形延遲時間爲30毫秒。爲了測試循環,我在每個循環中都放了一個打印語句,但是每次圖形循環觸發時都不會看到邏輯循環觸發3次,而是以一對一的比率觸發。Tkinter。相對時間不正常工作

這裏是我的代碼(很抱歉的多個文檔:

from tkinter import * 
import random 
import math 

from AppClass import App 

root = Tk() 
root.title('Test') 
root.resizable(0, 0) 
app = App(root) 

root.mainloop() 

Appclass:

from tkinter import * 
import random 
import math 
class App: 
    def __init__ (self, _window): 
     self.window = _window 

################################# 
     self.logicClock = 10 
     self.graphicClock = 30 
################################# 


     print(0) 
     self.createCanvas() 
     self.createBindings() 
     self.logicStep() 
     self.graphicStep() 

    def createCanvas (self): 
     self.canvas = Canvas(self.window, 
          bg = "#ff7f00", 
          width = 1280, 
          height = 750 
          ) 
     self.canvas.pack() 
     self.canvas.focus_set() 

    def createBindings (self): 
     pass 

    def logicStep (self): 
     self.canvas.after(self.logicClock, self.logicStep) 
     print(1) 

    def graphicStep (self): 
     self.canvas.after(self.graphicClock, self.graphicStep) 
     print(2) 

而且結果(運行第一程序時(注:他們是在同一個目錄中,有正確的文件名)):

0 
1 
2 
1 
2 
1 
2 
etc. 

你能幫我嗎?

+0

你在窗戶上嗎?我不認爲窗口上的時鐘足夠精確(在軟件層面)來區分10到30毫秒。 –

回答

0

10和30毫秒是不夠的;如果你增加間隔,它的工作原理:

在這裏,我用了1000和3000,所以我可以看到它發生。

0 
1 
2 
1 
1 
2 
1 
1 
1 
2 
1 
1 
1 
2 
1 
+0

謝謝。我想我解決了它。按照我設置的方式,print語句運行時間超過30毫秒。當我剛剛將函數追加到列表中,然後打印列表時,它在10和30處工作。 –

0

30毫秒對於打印語句來說太短,所以這兩個函數都被阻止了相同的數量。當我追加到列表中,然後打印時,它就起作用了。