2012-02-16 3 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, 사이 코드의이 시점에서 번갈아 할 수있는 두 개의 소스 트랙을 가지고있다 (: 부하()를 가능한 한 명확하게하기 위해 나는 사운드를 벗었습니다) changeMusic()이 호출 될 때마다 trackToPlay는 항상 musicDownbeat입니다. 즉, changeMusic()이 호출 될 때마다 음악이 중지되고 musicUpbeat로 변경됩니다.

소리 : load()는 한 번만 호출됩니다. 맞습니까? 그렇다면 내 trackToPlay 변경 사항이 저장되지 않는 이유는 무엇입니까?

+0

"사운드 : load()는 한 번만 호출됩니다." 나는 모른다. 너의 기능이야, 그렇지? 얼마나 자주 전화하십니까? 아니면 특별한 루아 환경입니까? –

+0

나는 또한 Love2D 프레임 워크를 사용하고 있습니다. 죄송합니다. 문제를 해결할 수 있을지 모르겠지만 포함시켜야합니다. 이 기능은 잠시 "f"키를 누를 때마다 호출됩니다. –

답변

4

문제는 changeMusic입니다. 두 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으로 변경됩니다 첫 번째 문을 입력 한 다음 두 번째 if 문을 사용하여 즉시 musicUpbeat으로 변경했습니다.

+0

와우, 나는 어리 석다. 다행히 쉬운 수정이었습니다. 고마워요! –