为什么游戏时间缩短了一半而不是2秒

Why is game time shortened by half instead of 2 seconds?

本文关键字:2秒 一半 游戏时间 为什么      更新时间:2023-09-26

我正试图用纯JavaScript构建一个游戏作为练习。

游戏的目的是在计时器用完之前回答一个随机的数学练习。时间是由一个落在某人头上的鸡蛋来表示的;如果你答对了所有的数学练习,你就会重新开始,但时间会缩短2秒。

我的问题是:在第一级比赛中,时间如预期,但到了第二级,时间缩短了一半。是什么导致了这种情况的发生?

相关代码:

var gameTime;
//function responsible for starting The game
function StartGame() {  
    ...
    ...
    ...
    checkLevel();
    getNewTime();        
    speed=getNewSpeed();
   dh=setInterval("move(egg)",gameTime);
    ...             
}//End start game
function checkLevel() {
   
   if(document.getElementById("begginer").checked==true) {
        fillNumbervalue(true);
        gameTime=30;                   
       }
    else  {        
        fillNumbervalue(false); 
          gameTime=60;    
    } //End else   
}//End of checkLevel
function getNewSpeed () {    
    return (distanceBetweenEggToYudale/gameTime); //distanceBetweenEggToYudale=310
}//End function
    
//if player pass level this function will get down by 2 seconds the time
function getNewTime() {
    for(var i=0;i<levelCount;i++)
              gameTime-=2;
}//end getNewTime
//function responsible for moving The Egg
function move(eggBall) {    
    eggBall.imagePositionY=eggBall.imagePositionY+(gameTime/1000)*speed;  
 //image postion=0 at the beginning
    eggBall.element.style.top=eggBall.imagePositionY+"px";       
   ...
   ...     
}//End move
//when the player push the answer button
function answerValidation() {
        var answers=new Array();        
            for(var i=0;i<result.length;i++)
                answers[i]=document.getElementById("txtAnswer"+(i+1)).value;        
    
                if(result[0]!=answers[0] || result[1]!=answers[1] || result[2]!=answers[2])                  
                    gameOverScreen();                     
                else 
                {
                   score++;
                   levelCount++;                   
                   init(); //Initial the egg position onload of the body element
                   clearTxtRows();                   
                   gameTime-=2;  
                    
                   StartGame();      
                }//End else  
             
          
    }//End anwser validation 

我知道这个问题有很多代码,所以如果有人能帮忙,我将不胜感激。

问题是,当您想做的是同时开始并从中递减时,您正在重用gameTime变量。所以您需要一个startGameTime变量。

只有一个gameTime变量:

http://jsfiddle.net/DPTJ3/1/

使用startGameTime变量在递减前重新启动gameTime值:

http://jsfiddle.net/DPTJ3/

function getNewTime() {
    gameTime = startGameTime;
    for (var i = 0; i < levelCount; i++) {
        gameTime -= 2;
    }
}
function logData() {
    log = document.getElementById('log');
    log.innerHTML += "LEVEL: " + levelCount + "'nGTIME: " + gameTime + "'n'n";
}
var levelCount = 1;
var startGameTime = 60;
var gameTime = 60;
logData();
for (var i = 0; i < 10; i++) {
    levelCount++;
    getNewTime();
    logData();
}

输出

LEVEL: 1
GTIME: 60
LEVEL: 2
GTIME: 56
LEVEL: 3
GTIME: 54
LEVEL: 4
GTIME: 52
LEVEL: 5
GTIME: 50
LEVEL: 6
GTIME: 48
LEVEL: 7
GTIME: 46
LEVEL: 8
GTIME: 44
LEVEL: 9
GTIME: 42
LEVEL: 10
GTIME: 40
LEVEL: 11
GTIME: 38

编辑

此外,如果您想精确地递减,您可能应该考虑到这样一个事实,即getNewTime()函数的第一个级别实际上是0,而不是一个。如果你注意到了,它似乎将第一个递减了两个等级。要解决此问题,您可以:

for (var i = 0; i < levelCount - 1; i++) { // Notice the - 1