【发布时间】:2016-11-29 14:31:36
【问题描述】:
我尝试编写一个小的 Android 程序,它告诉我到一个固定点的距离。当设备与固定点的距离在 100 米以下时,手机会播放声音。
if (distance<100){mySound.Play()};
没关系,声音开始了,但是当 GPS 发送新的坐标,距离再次低于 100 米时,mySound 会每秒一次又一次地开始。当距离在第一次下降到 100 米以下时,声音应该只播放一次。有什么建议吗?谢谢!
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) 将
soundPlayed设为 public 或 private 变量,以便它可用于其他函数。 (2) 最好使用soundChannel来停止/开始/暂停Sound对象的任何播放。 (3) 我建议有一个单独的 loadSound 函数来准备和解码,以便稍后您的GPS_frissit只需在需要时播放它,现在您可以在 Ram 中制作多个完全相同的声音的新副本。一次加载并重新播放多次。 (4) 我建议您将 mp3 作为一个类嵌入到您的代码中,以便您的应用程序代码和 mp3 一起编译为一个单元。在线检查。 -
另外
soundPlayed == true;真的应该是soundPlayed = true;...当你说soundPlayed = false;时,确保你也做一些事情(代码)来真正停止声音..
标签: android actionscript-3 if-statement