2012-02-16 17 views
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つのソース・トラックを持っている、とのコードでは、この時点で(私はサウンドを剥ぎ取られている:負荷()可能な限り明確にします) changeMusic()が呼び出されるたびに、trackToPlayは常にmusicDownbeatになります。これは、changeMusic()が呼び出されるたびに音楽が停止し、musicUpbeatに変更されることを意味します。

サウンド:load()は1回だけ呼び出されます。では、なぜ私のtrackToPlayの変更が保存されていないのですか?

+0

「サウンド:load()は一度しか呼び出されません」知りません;それはあなたの機能ですよね?どのくらい頻繁に呼びますか?それともこれは特別なLua環境ですか? –

+0

私もLove2Dフレームワークを使用しています。申し訳ありませんが、問題に関係するかどうかわかりませんが、それを含めておくべきです。ファンクションは、私が "f"キーを押すたびに呼び出されます。 –

答えて

4

問題はchangeMusicにあります。 2つのifステートメントの代わりにelseifを使用する必要があります。あなたのコードは次のようになります。

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 

、あなたの元のコードでそれを書かれている方法は、trackToPlaymusicUpbeatであれば(それは次のようになりますchangeMusicが初めて呼び出された後に)、それはでmusicDownbeatに変更されます最初のステートメントを実行し、すぐにmusicUpbeatに変更し、2番目のifステートメントを実行します。

+0

うわー、私は馬鹿だと感じる!うれしいのはうれしい修正です、ありがとう! –