2016-11-29 2 views
1

Я пытаюсь написать небольшую программу для Android, которая сообщает мне расстояние от точки исправления. Когда расстояние устройства и фиксированная точка ниже 100 метров, телефон воспроизводит звук.Выйти из инструкции If в ActionScript3?

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

** (1) ** Сделать 'soundPlayed' либо как ** ** или общественного ** private ** var, поэтому он доступен для других функций. ** (2) ** Лучше использовать «soundChannel», чтобы остановить/запустить/приостановить любое воспроизведение объекта «Звук». ** (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;'? Я поставил вне 'public function GPS_refresh (event: GeolocationEvent): void' не менять значение обратно на false, но звук снова начинается. – BHadh

+0

Поместите его в пакет, но вне любых функций. Даже снаружи и перед вашим основным конструктором документа. –

Смежные вопросы