我无法使球向相反方向移动。这是我的代码:
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 ;
}
};
答案 0 :(得分:1)
在检查边界之前,每次迭代都要设置d = 1。 移动
var d=1
退出功能或退出循环。
答案 1 :(得分:0)
你的问题是你没有保存每个球正在行进的方向?plot.default
。在你的代码中,一旦球到达边缘,它将朝相反方向前进。直到它再次进入界限,在那个循环中它会再次改变方向。
这导致了代码的主要问题,有两个独立的d
和x
坐标数组,而不是一个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的要点,可以帮助你入门。