Я не знаю много о JS, но я должен делать задания с ним. сейчас у меня есть мяч, который отскакивает от одной стороны экрана к другой. с каждым отскоком цвет экрана и мяч меняются. но я хотел бы также немного увеличить скорость с каждым отскоком (или случайную скорость каждый раз, когда она отскакивает, если это легче). Вот код, который у меня есть для перемещения, отскок и изменение цвета:

    fill(r,g,b);
    ellipse(circleX, circleY, circleSize, circleSize);

    circleX += moveX;

    if (circleX > width - circleSize / 2 || circleX < circleSize / 2) {
            moveX = -moveX;
            r = random(255);
            g = random(255);
            b = random(255);
        }

MoveX теперь всегда 5 и изменяется на -5 при повороте назад. но мне бы понравилось, если бы оно снова превратилось в -6, а затем в +7, когда мы снова пойдем вперед. или что-то подобное по крайней мере. Я заранее благодарю вас, ребята, за помощь, и, пожалуйста, объясните, как вы объясняете это ребенку.

1
Ramses Beau Bams 15 Дек 2015 в 19:37

3 ответа

Лучший ответ

Вы захотите добавить еще один тест в свой код обнаружения столкновений, чтобы увеличить скорость. Если скорость положительная, то вы хотите добавить 1. Если скорость отрицательная, вы хотите вычесть 1. Ваш код будет выглядеть примерно так ...

...
moveX = -moveX
if (moveX < 0) {
  --moveX;
} else {
  ++moveX;
}
...
0
linkleonard 15 Дек 2015 в 16:49

Во-первых, давайте создадим функцию, которая принимает число и возвращает +1 для неотрицательных чисел (положительных или 0) и -1 для отрицательных чисел, т.е. это знак

function sign(x) {
    if (x < 0) return -1;
    return 1;
}

Полная реализация sign будет иметь специальный случай для 0 и является изначально доступен в ES6


Затем, когда наступит время изменить moveX по отдельности его величину (абсолютное значение) и знак, увеличьте его величину и снова соедините две части вместе, прежде чем перевернуть знак

moveX = -sign(moveX) * (Math.abs(moveX) + 1);
1
Paul S. 15 Дек 2015 в 16:43

Следите за тем, сколько раз круг «отскочил», и прибавьте его к скорости.

var base_speed = 5;
var bounces = 0;
var direction = 1; //positive for moving right, negative for moving left
var moveX = base_speed + bounces * direction;

circleX += moveX;

if (circleX > width - circleSize / 2 || circleX < circleSize / 2) {
    direction = -direction;
    bounces++;
    r = random(255);
    g = random(255);
    b = random(255);
}
0
Brad 15 Дек 2015 в 16:45