2016-11-29 33 views
1

我嘗試編寫一個小型的Android程序,它告訴我與固定點的距離。當設備與固定點的距離低於100米時,手機會發出聲音。從ActionScript3中的If語句突破?

if (distance<100){mySound.Play()}; 

這是確定的,聲音開始,但是當GPS發送新的座標和距離低於百米一遍,爲mySound在每一秒一次重新開始。聲音應該只播放一次,當距離在第一時間低於100metes時。有什麼建議?謝謝!

var soundPlayed:Boolean=false;  
public function GPS_frissit(event:GeolocationEvent):void 
{ 
    var R = 6371; // km 
    var dLat = (47.507105-event.latitude)*Math.PI/180; 
    var dLon = (19.024519-event.longitude)*Math.PI/180; 
    var lat1 = (event.latitude)*Math.PI/180; 
    var lat2 = 47.507105*Math.PI/180; 

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 
    var e = Math.round(d*1000); 
    var tavolsag:String; 

    var mySound:Sound = new Sound(); 
    mySound.load(new URLRequest("sound.mp3")); 

    if (e < 100 && soundPlayed == false){ 
     soundPlayed == true; 
     mySound.play(); 
    } 

    if (e >= 100){ 
     soundPlayed = false; 
    } 

    if (e <100){  
     tavolsag = "X"; 
    } 

    else if (e > 100) 
    { 
     tavolsag = "Y"; 
    } 
    document.write(tavolsag); 
} 
+1

**(1)**讓'soundPlayed'無論是作爲公衆**或** ** private ** var,所以它可用於其他功能。 **(2)**最好使用'soundChannel'來停止/開始/暫停任何'Sound'對象的播放。 **(3)**我建議有一個單獨的loadSound函數來準備和解碼,以便稍後您的'GPS_frissit'只需在需要時播放它,現在您可以在Ram中製作多個完全相同聲音的新副本。製作一個負載並重新播放多次。 **(4)**我建議你在你的代碼中嵌入mp3作爲一個類,這樣你的應用代碼和mp3就可以作爲一個單元一起編譯。在線檢查。 –

+1

也'soundPlayed == true;'真的應該''soundPlayed = true;'...當你說'soundPlayed = false;'確保你也做了一些事情(代碼)來實際停止聲音.. –

回答

1

只需使用布爾值即可。這有時被稱爲標誌或標誌狀態。

if (dist < 100 && soundPlayed == false){ 
    soundPlayed = true; 
    mySound.play(); 
} 

然後

if (dist >= 100){ 
    soundPlayed = false; 
} 

你只需要一個變量添加到您的類名爲var soundPlayed:Boolean = false;

+0

THx!在哪裏放置'var soundPlayed:Boolean = false;'變量?我在公共函數GPS_refresh(event:GeolocationEvent):void'外面放置了不要將值改回false,但是聲音重新開始。 – BHadh

+0

將其放入包裝內,但不包含任何功能。即使在你的主文檔構造函數之外和之前。 –