Alcance de la función lua
Pregunta
Así que tengo una pregunta fácil, pero no entiendo por qué mi código no está haciendo lo que quiero.
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
Así que tengo dos pistas fuente que se pueden alternar entre MusicupBeat y MusicDownBeat, y en este punto del código (he despojado el sonido: load () para dejarlo lo más claro posible), cada vez que Changemusic () es Llamado, TrackToPlay es siempre MusicDownBeat, lo que significa que cada vez que se llama Changemusic (), la música se detiene y se cambia a MusicUpbeat.
Sound: Load () solo se llama una vez, ¿verdad? Entonces, ¿por qué se están guardando los cambios de seguimiento de TrackToplay?
Solución
El problema está en la función changeMusic
. Necesitas usar elseif
en lugar de dos if
declaraciones. Su código debería verse así:
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
La forma en que lo ha escrito en su código original, si trackToPlay
es musicUpbeat
(Será después changeMusic
se llama la primera vez), se cambiará a musicDownbeat
por la primera declaración, y luego se cambió inmediatamente a musicUpbeat
por el segundo if
declaración.