lir*_*ron 4 javascript javascript-events
我试图用纯Javascript构建游戏作为练习.
游戏目的是在计时器用完之前回答随机数学练习.时间用一个落在某人头上的蛋来表示; 如果你正确地回答了所有的数学练习,你将重新开始,但时间会缩短2秒.
我的问题:在游戏的第1级,时间按预期工作,但是第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
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经加载了代码,所以如果有人可以提供帮助我真的很感激.
问题是你正在重复使用你的gameTime变量,当你想要做的事情是同时开始并从那里开始减少时.所以你想要一个startGameTime变量.
只有一个gameTime变量:
使用startGameTime变量gameTime在递减之前重新启动值:
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();
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
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
Run Code Online (Sandbox Code Playgroud)
编辑
此外,如果您想要精确地减少,您应该考虑到第一级实际上是0而不是getNewTime()函数的事实.如果你注意到,它似乎将第一个减去两个等级.要解决此问题,您可以:
for (var i = 0; i < levelCount - 1; i++) { // Notice the - 1
Run Code Online (Sandbox Code Playgroud)