如何使用tkinter进行多处理或线程处理

时间:2015-08-04 10:45:51

标签: python animation tkinter multiprocessing

我正在尝试制作一个简单的太空入侵者游戏,而我遇到的一个问题就是让事情同时发生。我已将拍摄动作绑定到游戏画布上,以便在您单击某个功能时调用。我希望这个功能可以一次调用多次,这样一次可以在屏幕上看到多个“激光/子弹”。在您点击并且屏幕上已经显示“激光/子弹”时,前一个消失并出现一个新的激光/子弹。代码:

class Game1():

def __init__(self, xcoord1=380, ycoord1=550, xcoord2=400, ycoord2=570):
    self.Master = Master
    self.Master.geometry("800x600+300+150")
    Game1Canvas = Canvas(self.Master, bg="black", height=600, width=800)
    Game1Canvas.place(x=0, y=0)
    self.Canvas = Game1Canvas
    self.Canvas.bind("<Button-1>", self.Shoot)
    self.Ship = self.Canvas.create_rectangle(self.xcoord1, self.ycoord1, self.xcoord2, self.ycoord2, fill = "red")

def Shoot(self):
    self.LaserLocation = 0
    for self.LaserLocation in range(0 , 112):
        Master.after(1, self.Canvas.create_rectangle(self.xcoord1, self.ycoord1 - (self.LaserLocation * 5), self.xcoord2 - 5, self.ycoord2 - (self.LaserLocation * 5), fill = "pink", tag=str(CurrentTag)))
        Master.update()
        self.Canvas.delete(str(CurrentTag))

这是一个更加“愚蠢”的代码版本,因为我一直在尝试一些不同的方法来使这个工作,这是一个烂摊子。我知道多处理和线程导入,我已经尝试过它们但我无法让它们为我的代码工作。如果有人可以用解决方案回复,我将非常感激。欢呼声。

1 个答案:

答案 0 :(得分:2)

您不需要使用多线程或多处理。您也不需要(也不想)每毫秒或每毫秒多次绘制新的矩形。

解决方案是让您的OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor(){ @Override public Response intercept(Chain chain) throws IOException{ Request request = chain.request(); Response response = chain.proceed(request); response.code()//status code return response; }); //then add it to you Restclient like this: restAdapter = new RestAdapter.Builder() .setEndpoint(URL_SERVER_ROOT) .setClient(new OkClient(client)) //plus your configurations .build(); 函数仅创建一个矩形,并将其添加到列表中。然后,使用简单的动画机制,遍历列表并将每个子弹向上移动一到两个像素。您可以通过创建一个每20-30毫秒调用一次的函数来完成此操作。

解决方案看起来像这样:

Shoot

以上将每隔30毫秒(约33 fps)移动激光。