Lua Function Scope - PullRequest
       9

Lua Function Scope

0 голосов
/ 16 февраля 2012

Итак, у меня есть, надеюсь, простой вопрос, но я не понимаю, почему мой код не выполняет то, что я хочу.

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

Итак, у меня есть два трека с исходным кодом, которыеможно чередовать между musicUpbeat и musicDownbeat, и на этом этапе кода (я сократил Sound: load (), чтобы сделать его как можно более понятным), каждый раз, когда вызывается метод changeMusic (), trackToPlay всегда является musicDownbeat, чтокаждый раз, когда вызывается метод changeMusic (), музыка останавливается и изменяется на musicUpbeat.

Звук: load () вызывается только один раз, верно?Так почему же мои изменения в trackToPlay не сохраняются?

1 Ответ

4 голосов
/ 16 февраля 2012

Проблема в функции changeMusic.Вам нужно использовать elseif вместо двух if операторов.Ваш код должен выглядеть следующим образом:

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

То, как вы написали его в исходном коде, если trackToPlay равно musicUpbeat (это будет после того, как changeMusic будет вызван в первый раз),оно будет изменено на musicDownbeat первым оператором, а затем немедленно заменено на musicUpbeat вторым оператором if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...