为什么游戏时间缩短了一半而不是2秒
Why is game time shortened by half instead of 2 seconds?
我正试图用纯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
相关文章:
- 显示5秒后隐藏潜水
- X秒后刷新select元素
- 如何每10.6秒从时间戳增加+1
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 设置随机数,然后每5秒随机减少一次,直到达到0(javascript)
- Javascript函数,需要每隔30秒递减一次
- Javascript倒计时计时器倒计时未正确更新秒/分钟
- 显示数字,然后每5秒随机更改一次(javascript)
- 定时循环,使用Javascript在2个循环之间间隔x秒
- 定时循环,间隔10秒
- 如何判断请求/承诺是否需要超过5秒才能完成,angular js
- 3秒后淡出文本
- 仅当javascript的新内容出现时,才每3秒更新一次javascript
- 如果未按下该按钮,则在30秒内自动执行该功能
- 使Javascript滑块每4秒自动滑动一次
- 在JavaScript中相等两个对象.在更改一时,秒会自动更改
- 在单击下一个按钮之前,在JavaScript代码中添加5秒的延迟
- GTM每隔5秒在页面上查找文本
- 在控制器中将输入类型时间更改为秒
- 为什么游戏时间缩短了一半而不是2秒