Lua Funzione Ambito
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?
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
.