0

質問は簡単だと思いますが、私のコードが意図したとおりに動作しない理由がわかりません。

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 の間で交互に使用できる 2 つのソース トラックがあり、コードのこの時点では (できるだけ明確にするために Sound:load() を取り除いています)、changeMusic() がつまり、changeMusic() が呼び出されるたびに音楽が停止し、musicUpbeat に変更されます。

Sound:load() は一度しか呼び出されませんよね?では、trackToPlay の変更が保存されないのはなぜですか?

4

1 に答える 1

4

問題は関数にありますchangeMusic。2 つのステートメント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後)、最初のステートメントで に変更され、すぐに2 番目のステートメントで に変更されます。changeMusicmusicDownbeatmusicUpbeatif

于 2012-02-16T08:28:15.673 に答える