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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top