2016-05-02 22 views
1

私はダイバーが水中に飛び込むようにアニメーションを作成するためにTkinterに取り組んでいます。 私は彼が水に触れる瞬間、プログラムのサウンドを再生する必要があります。 私のコードですが、動作しませんでした。特定の条件でwinsoundを再生

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

更新位置部分とフィードバック部分を分ける必要があります。 はまた、あなたは私たちがold_y < PosYe+20 < new_y 最後に、あなたがTrueで初期化ができますが、衝突を持っていたらFalseに切り替えられたフラグを追加することができます持っている可能性があるためy位置を更新する値PosYe+20に入ることを確認する必要があります。

あなたはこのコードを試すことができます。

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 
関連する問題