Я думаю, вам нужна постоянная скорость в направлении определенного направления в координатах x и y.
Я бы предложил создать два случайных целочисленных значения для x_velocity и y_velocity. Вы можете попробовать использовать Math.random () и Math.floor ():
function getRandomInt(min, max) {
return Math.floor((Math.random() + min) * Math.floor(max));
}
Тогда вам нужно будет определить направление, если оно отрицательное (влево) или положительное (влево):
function getDirection() {
return this.getRandomInt(0, 2) === 0? -1 : 1;
}
Используйте эти две функции для установки x_velocity
и y_velocity
. Теперь мяч должен двигаться влево, вправо, вверх или вниз:
directionX = this.getDirection();
directionY = this.getDirection();
x_velocity = directionX * this.getRandomInt(1,8); // the number will be between -8 and 8 excluding 0
y_velocity = directionY * this.getRandomInt(1,8); // same here
Observable.interval(10).takeUntil(Observable.interval(4000))
.subscribe( () => {
ball.attr("cx", x_velocity + Number(ball.attr("cx"))); // the ball should go towards the left or the right
ball.attr("cy", y_velocity + Number(ball.attr("cy"))); // the ball should go up or down
);
Удачного кодирования! :)