Domanda

Così ho una domanda si spera facile, ma non capisco il motivo per cui il mio codice non sta facendo quello che voglio a.

function Sound:load()
 trackToPlay = musicDownbeat

 trackToPlay:play()
end

function Sound:changeMusic()
 if trackToPlay == musicUpbeat then
      trackToPlay:stop()
      trackToPlay = musicDownbeat
      trackToPlay:play()
 end
 if trackToPlay == musicDownbeat then
      trackToPlay:stop()
      trackToPlay = musicUpbeat
      trackToPlay:play()
 end
end

Così ho due tracce fonte che può essere alternato tra, musicUpbeat e musicDownbeat, ea questo punto del codice (ho ridotta Suono: load () per renderlo più chiaro possibile), ogni volta changeMusic () viene chiamato, è sempre trackToPlay musicDownbeat, il che significa che ogni volta che changeMusic () viene chiamata, la musica si interrompe e viene modificato in musicUpbeat.

Audio: load () viene chiamato solo una volta, giusto? Allora, perché sono il mio trackToPlay cambiamenti non essere salvato?

È stato utile?

Soluzione

Il problema è nella funzione changeMusic. È necessario utilizzare elseif invece di due affermazioni if. Il codice dovrebbe essere simile a questa:

function Sound:changeMusic()
 if trackToPlay == musicUpbeat then
      trackToPlay:stop()
      trackToPlay = musicDownbeat
      trackToPlay:play()
 elseif trackToPlay == musicDownbeat then
      trackToPlay:stop()
      trackToPlay = musicUpbeat
      trackToPlay:play()
 end
end

Il modo in cui è stato scritto nel codice originale, se trackToPlay è musicUpbeat (sarà dopo changeMusic viene chiamato per la prima volta), verrà trasformato in musicDownbeat dalla prima dichiarazione, e poi subito cambiato in musicUpbeat dal seconda istruzione if.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top