在特定条件下玩winound

时间:2016-05-02 20:15:33

标签: python animation audio tkinter

我正在为Tkinter制作动画,让潜水员跳入水中。 我需要程序在接触水的那一刻起播放声音。 这是我的代码的部分,但它不起作用。

    from tkinter import *
    from tkinter import ttk
    from math import *
    import winsound, sys
    def beep():
        winsound.PlaySound('death1.wav' , winsound.SND_FILENAME)

    def animate():            
        nonlocal x,y,flag,t,i
        t=i*dt
        i=i+1
        if y<=PosYe+20:     #we define the water level = PosYe+20
            Canevas.coords(plongeur,x,y)
            x,y=x,y+g*t*dt*m1  
            if y==PosYe+20 :
                beep()

我试过这个(只是为了验证它是否可以播放声音),它每次计算它的新位置时都会播放声音。所以我想知道在这种情况下我是否不能写条件。

    from tkinter import *
    from tkinter import ttk
    from math import *
    import winsound, sys
    def beep():
        winsound.PlaySound('death1.wav' , winsound.SND_FILENAME)

    def animate():            
        nonlocal x,y,flag,t,i
        t=i*dt
        i=i+1
        if y<=PosYe+20:     #we define the water level = PosYe+20
            Canevas.coords(plongeur,x,y)
            x,y=x,y+g*t*dt*m1  
            beep()

我需要一些建议来正确地写出条件。

1 个答案:

答案 0 :(得分:1)

您必须将更新位置部分和反馈部分分开。 此外,您必须确保更新y位置属于PosYe+20值,因为我们可以old_y < PosYe+20 < new_y 最后,您可以添加一个用True初始化的标记,但在发生碰撞后切换为False

您可以尝试以下代码:

if y < PosYe + 20:     #we define the water level = PosYe+20
    Canevas.coords(plongeur,x,y)
    x,y=x,y+g*t*dt*m1  

elif flag and PosYe + 20 <= y :
    beep()
    flag = False