2017-12-06 1 views
1

최종 프로젝트를위한 간단한 반응 시간 게임을 만들고 있습니다. 우리는 게임에서 기능을 수행하는 데 자바 스크립트를 사용하고 있습니다. 대부분의 코드는 정상적으로 작동하지만, 조건문을 사용하면 문제가 생깁니다. 다음은 코드조건문이 변수 값을 인식하지 못합니다.

function fireTime() { 
    setTimeout(ShotsFired, time); 

    function ShotsFired() { 
    fire.style.visibility = "visible"; 
    createdTime = Date.now(); 
    console.log(createdTime); 
    EnemyTime = Math.floor((Math.random() * 1000) + 400); 
    setTimeout(EnemyShoot, EnemyTime) 

    function EnemyShoot() { 
     console.log(EnemyTime); 
     gameplay(); 
    } 

    function gameplay() { 
     reactionTime = -(createdTime - clickedTime); 
     var EnemyTime; 
     console.log(reactionTime); 
     if (reactionTime < EnemyTime) { 
     alert("Wow you beat him! Congrats!"); 
     fire.style.visibility = "hidden"; 
     clickedTime = 0; 
     createdTime = 0; 
     reactionTime = 0; 
     scavnumber++; 
     BGnumber++; 
     DesertBG.src = "images/Desert" + BGnumber + ".png"; 
     scav.src = "images/scav" + scavnumber + ".png"; 
     fireTime(); 
     } else { 
     EndScreen.style.visibility = "visible"; 
     } 
    } 

이 전체 코드, 다음 단계로 게임을 진행해야 바로 함수가 아닙니다에게 있습니다.

어떤 이유로 든 reactionTime이 EnemyTime보다 작아도 EndScreen이 표시됩니다.

누구든지이 문제의 원인을 알 수 있습니까?

+0

var EnemyTime; <<< undefined는 0으로 변환합니다. 선을 제거하고 함수 외부의 양수 값으로 초기화합니다. – mplungjan

+0

@Satpal 초기화되지 않았습니다. – mplungjan

+0

@mplungjan, OP가 전역 변수를 정의하고 함수에서 동일한 값을 다시 정의했다고 가정합니다. 범위 문제가 내게 보이고 더 많은 정보/코드를 공유 할 수 있도록 도와달라고한다. – Satpal

답변

0

적 시간 계산에 부동 소수점을 사용합니다 (예 : 400.0). 그렇지 않으면 밀리 초를 사용하지 않고 0/1 초를 얻으며 수학 정수를 사용합니다. enemyTime을 플로트 숫자로 구체적으로 집어 넣으십시오. 인쇄 할 경우 아마 정수입니다. 그것의 주요한 js 코딩 세부 사항은 당신이 당신이 101/50 = 2.05, 그것이 2와 같지 않다고 생각한다면 당신이 미래에 잠에서 깨어나는데 드는 시간을 소비 할 것이므로, 50.0으로 나누고 모든 두번째/ms 작업과 동일하게 생각할 것입니다.

EnemyTime을 모든 스크립트의 전역 변수로 사용하십시오. 현재 모든 스크립트에서 EnemyTime이라는 다른 기능을 가진 코드를 사용합니다. 후자의 경우 값이 없습니다.

인쇄를 사용하여 다른 조건이 작동하는지 확인하고, 둘 다 인쇄 할 때 enemyTime 값을 지정하십시오.

혼란스러운 변수를 인쇄하면 문제를 해결할 수 있습니다.

관련 문제