减去 int 给出与加法不同的结果

subtracting int gives different result than addition

(我并不是说减法给出的数学结果与加法不同——这是显而易见的) 我正在尝试制作一个粒子模拟器游戏,但我 运行 遇到了一个奇怪的现象。 (我正在使用 javascript 和 javap5.js)。在draw函数中,我有一个函数,测试一个粒子下面的space是否为空,如果是,则向下移动一个像素(或将结果加一-就是加法的地方)唯一的问题是,它不是在下降时逐渐变化,而是立即进入屏幕底部。当我改为使用减法时(因此重力上升),它的行为符合预期并逐渐上升。 这是我正在谈论的功能(游戏是粒子数组)-

function updateParticles() {
  for(var i = 0; i<250; i++) {
    for(var i2 = 0; i2<250; i2++) {
      if(game[i][i2] == 1) {
        if(game[i][i2+1] == 0) {
          game[i][i2]=0;
          game[i][i2+1]=1;
        }
      }
    }
  }
}

这是全部内容(jsfiddle)- https://jsfiddle.net/gwood5901/trm6xLv8/

您的 for 循环从左到右,从上到下。这是正在发生的事情的简化模型:

i = 0;
[ 1 ] <-- Is this a one?
[ 0 ] <-- And is this a zero?
[ 0 ]

YES
SWAP

[ 0 ] <-- prev 1
[ 1 ] <-- prev 0
[ 0 ]

i = 1;
[ 0 ] 
[ 1 ] <-- Is this a one?
[ 0 ] <-- And is this a zero?

YES
SWAP
[ 0 ]
[ 0 ] <-- prev 1
[ 1 ] <-- prev 0

所有这些都在函数的一次调用中立即发生。

加上减法:

i = 0;
[ 0 ] <-- Is this a zero?
[ 0 ] <-- And is this a one?
[ 1 ]

NO
DO NOTHING

i = 1;
[ 0 ] 
[ 0 ] <-- Is this a zero?
[ 1 ] <-- And is this a one?

YES
SWAP
[ 0 ]
[ 1 ] <-- prev 0
[ 0 ] <-- prev 1

在第二次函数调用中:

i = 0;
[ 0 ] <-- Is this a zero?
[ 1 ] <-- And is this a one?
[ 0 ]

YES
SWAP

[ 1 ] <-- prev 0
[ 0 ] <-- prev 1
[ 0 ] 

i = 1;
[ 1 ]
[ 0 ] <-- Is this a zero?
[ 0 ] <-- And is this a one?

NO
DO NOTHING

这可以通过两种方式解决:缓冲区或仅向后遍历数组。

下面是向后遍历数组的简单方法:

function  {
  for(var i = 250-1; i >= 0; i--) {
    for(var i2 = 250-2; i2 >= 0; i2--) {
      if(game[i][i2] == 1) {
        if(game[i][i2+1] == 0) {
          game[i][i2]=0;
          game[i][i2+1]=1;
        }
      }
    }
  }
}

这是一个 JSFiddle,updateParticles() 函数更改为:https://jsfiddle.net/Lhqgujxt/