2017-02-14 2 views
0

Ich habe einen Play (Resume)/Pause Button in Frame 1 (Home Page). Wenn der Benutzer jedoch die Anwendung navigiert und durch Drücken der Home-Taste auf die Startseite zurückkehrt, überschneidet sich der Ton. Und wenn der Benutzer die anderen Knöpfe drückt, überlappt er sich endlos. Vielen Dank! Dies ist eine ActionScript 3-Flash-Anwendung, die auf einem Android-Gerät mit Adobe AIR bereitgestellt wird. Hier ist mein Code:Überlappende Sounds Actionscript 3/AIR

import flash.net.URLRequest; 
import flash.media.Sound; 
import flash.media.SoundChannel; 
import flash.ui.Mouse; 
import flash.events.MouseEvent; 

var played:Boolean = false; 
var soundFile:URLRequest = new URLRequest("music.mp3"); 
var mySound:Sound = new Sound; 

if(played== false){ 
      played= true; 
mySound.load(soundFile); 
var myChannel:SoundChannel = new SoundChannel; 
myChannel = mySound.play(0,999); 

pause_btn.addEventListener(MouseEvent.CLICK,pauseSound) 
function pauseSound(event:MouseEvent):void 
    { 
     var position = myChannel.position; 
     myChannel.stop(); 
     play_btn.addEventListener(MouseEvent.CLICK,resumeSound); 
     } 

function resumeSound(event:MouseEvent):void 
    { 
     myChannel = mySound.play(myChannel.position); 
    } 
} 
+0

nicht Initialisierungscode in Timeline anwenden. Starten Sie auch keinen Sound, es sei denn, es gibt einen gültigen 'SoundChannel' in' myChannel', dies erfordert einige weitere Überprüfungen. Auch 'position' ist Funktion local in' pauseSound() ', bewegt sich auf global oder sonst verlieren Sie Daten und können Ihren Sound nicht fortsetzen. – Vesper

+0

@Vesper danke! Ich bin ein Anfänger in Flash, bitte ertragen Sie mit mir. Könnten Sie mir bitte Ihre Version des korrigierten Codes geben? Vielen Dank! – niagrafallsxxx

Antwort

0

Das ist, was Sie von in Rahmen Codierung erhalten, anstatt Klassen.

Lösung A: Machen Sie eine Klasse aus Ihrem Rahmen 1 Skript, so dass es nur einmal ausgeführt wird (wenn die Hauptzeitleiste erstellt wird).

Lösung B: make check vor ein Duplikat zu erstellen:

var played:Boolean; 

var mySound:Sound; 
var myChannel:SoundChannel 

// That will be executed only once, because the 
// next time this variable will be initialized. 
if (mySound == null) 
{ 
    played = true; 

    var soundFile:URLRequest = new URLRequest("music.mp3"); 

    mySound = new Sound; 
    mySound.load(soundFile); 
    myChannel = new SoundChannel; 
    myChannel = mySound.play(0,999); 

    pause_btn.addEventListener(MouseEvent.CLICK,pauseSound); 
} 
+0

danke @Organiss! Darf ich fragen, wo würde ich meine Lebenslauf-Fähigkeit von play_btn setzen? – niagrafallsxxx

+0

Definieren Sie einfach diese Funktion im ersten Frame, nur sicher sein, dass Sie es nur einmal abonnieren. – Organis

+0

Können Sie mir einen Beispielcode geben? Vielen Dank! – niagrafallsxxx