不能让球反弹回来

时间:2015-08-28 19:17:31

标签: javascript

我无法使球向相反方向移动。这是我的代码:

var xPositions = [random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400)];
var yPositions = [random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400),random(0,400)];

draw = function() {
    background(250,250, 250);
var velocidad=5;
    for (var i = 0; i < 10; i++) {

        fill(230, 156, 156);
        ellipse(xPositions[i], yPositions[i], 10, 10);
   var d=1;
   if(yPositions[i]>=400){
     d= -1;
} else if(yPositions[i]<=0){
     d = 1;
}
       yPositions[i] = yPositions[i] + velocidad*d ;
    }

};

2 个答案:

答案 0 :(得分:1)

在检查边界之前,每次迭代都要设置d = 1。 移动

var d=1

退出功能或退出循环。

答案 1 :(得分:0)

你的问题是你没有保存每个球正在行进的方向?plot.default。在你的代码中,一旦球到达边缘,它将朝相反方向前进。直到它再次进入界限,在那个循环中它会再次改变方向。

这导致了代码的主要问题,有两个独立的dx坐标数组,而不是一个y个数组。像

这样的东西
ball

然后你就这样发起你的球

function Ball() {
  this.x = random(0,400);
  this.y = random(0,400);
  this.direction = 1; // Or if you want to randomize: random(0,99)<50 ? -1 : 1;
  this.velocity = 5; // Or if you want to randomize: random(1, 5)
}

Ball.prototype = {
  draw:function() {
    fill(230, 156, 156);
    ellipse(this.x, this.y, 10, 10);
  },
  update:function() {
    var newposition = this.y+this.direction*this.velocity;
    if (newposition < 0 || newposition > 400) {
      this.direction*=-1; // If outside of bounds, reverse position
    }
    this.y = this.y+this.direction*this.velocity;
  }
};

在主循环中,您只需拨打var balls = []; for (var i = 0; i < 10 ; i++){ balls.push(new Ball()); } balls[i].update()

balls[i].draw()

还有很多事情需要改进,但这里有OOP的要点,可以帮助你入门。