2011-09-03 7 views
1

텍스트 어드벤처 게임 내에서 변수를 수정하는 데 문제가 있습니다. JavaScript 용 코드를 작성하고 있습니다. 함수 내의 함수를 사용하여 전역 변수의 값을 변경하려고합니다 (닫히지 않고 닫음). 게임이 작동하는 방법JavaScript - 함수가 전역 변수를 수정하지 않습니다.

/*This is just example code.*/ 
    var health = 100; 
    var exp = 0; 

    function refreshStats() { 
     health -= 10; 
     exp += 1; 
    } 

    function foo(flag) { 
     if (flag == DONOTHING) { 
     refreshStats(); 
     } 

     if (health <= 0) { 
     say("You died, bwahaha."); 
     } 

     if ((exp/10) == Math.floor(exp/10)) { 
     health += 10; 
     say("You leveled up!"); 
     } 
    } 

은 (게임 내 행동이나 영역으로 정의) 각 기능은 사용자가 각각 클릭하거나에서 쓸 수 있도록 자바 스크립트에 의해 배치 단추 및 양식에 의해 호출 될 것입니다. refresh()를 사용하여 health와 exp 변수를 업데이트해야 foo()가 올바르게 사용할 수 있습니다. 이 함수는 foo()가 실행될 때까지 변수를 업데이트하지 않는 것처럼 보입니다. 브라우저 호환성 문제인지 궁금해합니다. 브라우저 호환성 문제는 실제로 저를 싫어할 지 모르지만, 나는 그렇지 않길 바랄뿐입니다.

제안 사항?

+0

추측. "글로벌"변수는 실제로 전역 범위에서 정의되지 않으므로 다른 코드가 변수의 유효 범위가 다른 복사본을 수정합니다. 그러나 실제 코드와 그 주변의 컨텍스트를 보지 않고서는 이것을 알 수 없습니다. – jfriend00

+0

DONOTHING은 (는) 변수입니까, 아니면 "DONOTHING"이라는 문자열입니까? – Paulpro

+0

DONOTHING은 플래그와 같은 변수이지만 예제 코드에서는 정의하지 않았습니다. 이러한 상황에서는 작동하지 않을 것이라는 것을 알고 있지만 플래그가 아닌 전역 변수에 더 관심이 있습니다 (실제 코드의 플래그가 제대로 정의되어 있음). – zeroslash

답변

1

it's working for me처럼 보입니다. 아마 예제 코드 대신 실제 관련 코드를 게시 할 수 있습니까?

는 그 윈도우의 범위에서 사용할 수 있도록 윈도우 객체에
+0

관련성이 있다고하더라도 더 많은 의견이 있습니다. –

+0

당신이 죽었는지 아닌지를 결정하기 위해 변수의 값을 잡는 if-else 문이 코드에 없습니다. alert()와 같은 함수와 log()와 같은 메소드는 변수를 표시하지만 if-else 문은 표시하지 않습니다. – zeroslash

+0

@zero 그런 의미가 없습니다. 어떤 시점에서 변수의 값은'alert()'또는 조건부로 평가되는지 여부와 상관없이 같습니다. 뭔가 다른 일이 일어나고 있기 때문에 실제 코드를 게시하십시오. –

2

스토어 당신의 가치를, :

//take care to not overwrite native properties of the window 
window.health = 100; 
window.exp = 0; 

function refreshStats() { 
    health -= 10; 
    exp += 1; 
} 
관련 문제