2014-02-17 4 views
0

시작하기 전에이 게시물에서 볼 수있는 코드의 가능성에 대해 사과드립니다. 이것은 내가 고치려고했던 것 중에 가장 귀찮은 버그이다. 나는 몇 시간 동안 일해 왔고, 나는 아직 아무것도 찾지 못했습니다.수학 방정식에 대한 자바 스크립트 문제

나는 두 개의 자바 스크립트 변수를 가지고 있는데 하나는 addfood이고 다른 하나는 clicks입니다.

(addBPS) 아래의 제 함수 및 변수 addfoodclicks의 번호를 받아 다시 변수 clicks의 합을 재 할당한다.

함수의 다음 청크는 div에서 세는 숫자의 애니메이션 만 실행합니다. div의 숫자를 읽고 변수 clicks의 새 번호까지 "애니메이션"합니다.

이 0보다 큰 경우 함수 뒤에있는 문이 if 함수를 실행합니다. 또한 매초마다 addBPS 기능을 실행합니다. 마지막으로 if 문은 first이라는 변수를 정의하고이를 true로 설정합니다.

버튼을 클릭 할 때 실행되는 다음 함수는 변수 addfood을 재 할당하고 숫자 add (함수의 변수)을 모두 추가합니다.

다음 줄은 비슷한 것을 수행하고 변수 clicks을 다시 할당하고 숫자 cost (함수의 변수)을 뺍니다.

내가 생각하는 마지막 if 문은 매우 자명합니다. 변수 addfood이 0보다 큰 경우 함수 addBPS이 실행됩니다. 그런 다음 변수 first이 true가 아닌 경우에만 addBPS 함수에 대해 setInterval을 실행합니다.

기능 addBPS는 상관없이 매 초마다 실행되지 않습니다 ... 문제가 어디에서 오는

var addfood = 5; 
var clicks = 123; 

function addBPS() { 
    clicks = Number(clicks) + Number(addfood); 

    // Countup animation 
    $({countNum: $('#current').text()}).animate({countNum: Number(clicks)}, { 
     duration: 1000, 
     easing:'linear', 
     step: function() { 
     $('#current').text((Math.floor(this.countNum))); 
     }, 
    }); 
} 
if(Number(addfood) > 0) { 
    addBPS(); 
    setInterval(addBPS, 1000); 
    var first = true; 
} 

function upgradeGame(id, level, cost, add, user) { 
    addfood = Number(addfood) + Number(add); 
    clicks = Number(clicks) - cost; 
    if(Number(addfood) > 0) { 
     addBPS(); 
     if(first != true) { 
      setInterval(addBPS, 1000); 
     } 
    } 
} 

그래서 지금 여기 (변수 first은 라인 (19)에 사용되는 볼 수있다). 매초마다 addfood의 값을 clicks에 계속해서 추가해야합니다.

addfood의 값이 1 이상이면 코드가 완벽하게 작동합니다. 그러나 addfood의 값이 0 일 때 변수를 변경하고 단추를 사용하여 변수를 변경하면 코드 대신 addfood의 값을 clicks에 계속 추가하는 대신 변수를 추가하고 매번 SQUARES addfood의 값

예 :

기본 :

addfood = 0;
var clicks = 0;

addfood에 추가 :

addfood = 1;
var 클릭 수 (1 초 후) = 1;

addfood에 추가 :

addfood = 2;
var 클릭 수 (1 초 후) = 4;

addfood에 추가 :

addfood = 3;
var 클릭 (1 초 후) = 9;

내가 무엇을 기대 :

기본값 :

addfood = 0;
var clicks = 0;

addfood에 추가 :

addfood = 1;
var 클릭 수 (1 초 후) = 1;

addfood에 추가 :

addfood = 2;
var 클릭 (1 초 후) = 2;

addfood에 추가 :

addfood = 3;
var 클릭 수 (1 초 후) = 3;

그러나 내가 말한 것처럼 addfood의 초기 값이 1이면 코드가 정상적으로 작동합니다. 0 일 때 단추를 사용하여 addfood 값을 변경하면 예상 값이 제곱됩니다. 왜 이런 일이 일어나는 걸까요?

+0

디버그 프로세스를 완화하기위한 [jsfiddle] (http://jsfiddle.net/)를 만들 수 있습니까? – terales

답변

0

upgradeGame()이 호출 될 때마다 새 간격이 만들어집니다. 첫 번째 클릭 후에는 한 번만 호출됩니다. 두 번째 클릭 후 두 번 호출됩니다.이 문제를 해결하려면 포함 할 필요가

first=true; 

그래서 :

function upgradeGame(id, level, cost, add, user) { 
addfood = Number(addfood) + Number(add); 
clicks = Number(clicks) - cost; 
if(Number(addfood) > 0) { 
    addBPS(); 
    if(first != true) { 
     setInterval(addBPS, 1000); 
     first=true; 
    } 
} 
} 
+0

이것은 단지 나의 날을 만들었다. 몇 시간이 지난 지금, 그런 간단한 해결책! 내가 말할 수있는 것은 고마워요. – user3320550

관련 문제