我正在为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()
我需要一些建议来正确地写出条件。
答案 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