2013-01-19 49 views
0

所以我這個代碼誰創造感動球:做球落後的痕跡與Tkinter的

from Tkinter import * 
from random import randrange 
from threading import Thread 

Matrice = (600*400)*[0] 

class Ball(Frame): 

    def __init__(self, can, posx, posy, name): 
     self.can = can 

     self.largeur_can = int(self.can.cget("width")) 
     self.hauteur_can = int(self.can.cget("height")) 

     self.posx = posx 
     self.posy = posy 
     self.name = name 

     self.ball1 = self.can.create_oval(self.posy, self.posx, self.posy+10, self.posx+10, outline="red", fill=self.name, width=2) 

     self.nx = randrange(-10,10,1) 
     self.nx /= 2.0 
     self.ny = randrange(-10,10,1) 
     self.ny /= 2.0 


     self.move() 

    def move(self): 
     global Matrice 
     self.pos_ball = self.can.coords(self.ball1) 
     self.posx_ball = self.pos_ball[0] 
     self.posy_ball = self.pos_ball[1] 

     if self.posx_ball < 0 or (self.posx_ball + 10) > self.largeur_can: 
      self.nx = -self.nx   
     if self.posy_ball < 0 or (self.posy_ball + 10) > self.hauteur_can: 
      self.ny = -self.ny 

     self.can.move(self.ball1, self.nx, self.ny) 

     Matrice[int(self.posy_ball)*600 + int(self.posx_ball)] += 100 

     self.can.after(10, self.move) 



root=Tk() 
can=Canvas(root,width=600,height=400,bg="black") 
for x in range(10): 
    x=Ball(can,100,400, "blue") 
    x=Ball(can,100,400, "green") 
can.pack() 
root.mainloop() 

,我會創造球落後的痕跡,我創建了一個矩陣Matrice,我記錄每個球過去了,現在我想展示它的背景,但我不知道如何。 注意:矩陣中的值可能會減少或在move以外的地方更改。 所以,任何人有一個想法,我可以做到這一點?

+0

讓我試着解釋這個問題:你想在變化時顯示一些變量嗎?它每10毫秒修改一次,所以你不想這樣做。這意味着我不知道你在說什麼,請重寫你的問題。 – mmgp

回答

0

這是一種低效的方法,但它是最簡單的。每當你移動一個球時,只需從原來的位置畫出一條線,直到現在的位置。

self.can.move(self.ball1, self.nx, self.ny) 

new_pos = self.can.coords(self.ball1) 
self.can.create_line(self.posx_ball, self.posy_ball, new_pos[0], new_pos[1], fill='red') 

self.can.after(10, self.move) 

請注意,此行將沿着精靈的左上角 - 如果您希望它跟隨精靈的中間,則可以調整座標。