计数器不会按小数递增

时间:2014-06-11 18:28:11

标签: javascript html

我正在尝试javascript,到目前为止,我一直在努力做到这一点。虽然我意识到我所做的大部分工作可能都是错误的,或效率低下的。

我的第一个"项目"我试图做一个基本的游戏。点击镐,它会为你的总岩石增加+1。在你击中5个岩石后,你可以买一把铲子,它会以每秒一个的速度开始为你生成岩石。我目前不得不将此设置为每秒1,因为1以下的任何内容似乎都无效。

我的代码(由于我经常调整它,它仍然有些混乱):

JSBIN DEMO

HTML:

Total Rocks: <input id="txtNumber" type="text" value="0" onfocus="this.blur()" style=" border:none; text-align:center; background-color:transparent;" />
<br>

<img style="border:0;" src="http://img2.wikia.nocookie.net/__cb20130308043142/minecraftpocketedition/images/6/6d/Pickaxe_1.jpeg" onclick="javascript:add()">
<br>

Rocks per second: <input id="perSec" type="text" value="0" onfocus="this.blur()" style="width:30px; border:none; text-align:center; background-color:transparent;" />
<br>     

Shovel(<input id="shovelCount" type="text" value="0" onfocus="this.blur()" style="width:20px; border:none; text-align:center; background-color:transparent;" />): 5 rocks 

<input id="shovelBuy" type="button" value="Buy" onclick="javascript:shovel()"/>

</body>

使用Javascript:

var totalRocks = 0;
var rocksPerSec = 0;
    function increment() {
       var txtNumber = document.getElementById("txtNumber");
       var newNumber = parseInt(txtNumber.value, 10) + rocksPerSec;
       txtNumber.value = newNumber;
    }
setInterval(function(){increment();}, 1000);

function add()
{
  var txtNumber = document.getElementById("txtNumber");
  var newNumber = parseInt(txtNumber.value, 10) + 1;
  txtNumber.value = newNumber;
}

function shovel()
{
  var txtNumber = document.getElementById("txtNumber");
  var value = parseInt(txtNumber.value, 10);
  if(value >= 5){
    var newNumber = parseInt(txtNumber.value, 10) - 5;
    txtNumber.value = newNumber;
    var shovelCount = document.getElementById("shovelCount");
    var newCount = parseInt(shovelCount.value, 10) + 1;
    shovelCount.value = newCount;

    rocksPerSec = rocksPerSec +1;
    return false;
  } 
}

我的问题:为什么我不能用十进制值递增计数器(rockPerSec)?

2 个答案:

答案 0 :(得分:1)

我让this小提琴..你基本上不得不用parseInt()取代parseFloat(),如果你问'为什么?&#34;,答案因为如果你想将岩石的数字递增0.2,例如,parseInt(0.2)总是0.所以你总是将0.2添加到0并将其解析回0 ..希望它有帮助..

var totalRocks = 0;
var rocksPerSec = 0;
    function increment() {
       var txtNumber = document.getElementById("txtNumber");
       var newNumber = parseFloat(txtNumber.value, 10) + rocksPerSec;
       txtNumber.value = newNumber;
    }
setInterval(function(){increment();}, 1000);

function add()
{
  var txtNumber = document.getElementById("txtNumber");
  var newNumber = parseFloat(txtNumber.value, 10) + 1;
  txtNumber.value = newNumber;
}

function shovel()
{
  var txtNumber = document.getElementById("txtNumber");
  var value = parseFloat(txtNumber.value, 10);
  if(value >= 5){
    var newNumber = parseInt(txtNumber.value, 10) - 5;
    txtNumber.value = newNumber;
    var shovelCount = document.getElementById("shovelCount");
    var newCount = parseFloat(shovelCount.value, 10) + 1;
    shovelCount.value = newCount;

    rocksPerSec = rocksPerSec + 0.2;
    return false;
  } 
}

答案 1 :(得分:1)

作为第一个项目的帮助,我认为我提出了构建代码的建议

jsfiddle:http://jsfiddle.net/j8CJS/

您可以使用

启动代码
var miner = new Miner();
miner.start();

它还允许重置和停止(或者更确切地说)当前游戏。当相对属性发生变化时,你的html代码会发生变化,并添加一些我通常会从jquery中借用的函数:)