Мне нужно решить tsk, в котором меня просят смоделировать поведение хвоста собаки. Эта "сказка" представляет собой простой куб, и у меня есть поворот от 0 ° до 45 ° и от 45 ° до 0 °. Проблема в том, что когда он достигает 45 °, он снова начинает вращение с 0 °.
Мне нужно постоянное движение; не восстанавливая исходное положение и перезапустите вращение с 0 ° до 45 °.
var theta = [0, 0, 0, 0, 0, 0, 180, 0, 180, 0, 20, 0];
var tailId = 11;
function move() {
// TAIL
var dir = true;
if ( theta[tailId] < 45 ) {
theta[tailId] +=1;
}
if (theta[tailId] == 45){
while(theta[tailId] !=45 )theta[tailId]+=-1;}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны использовать переменную dir (которая уже указана), но только как число. Когда значение превышает границу, просто измените направление.
Что-то вроде:
var theta = [0, 0, 0, 0, 0, 0, 180, 0, 180, 0, 20, 0];
var tailId = 11;
var dir = 1;
function move() {
// TAIL
theta[tailId] += dir;
if ( theta[tailId] < 0 ) {
theta[tailId] = 0;
dir = -dir;
} else
if ( theta[tailId] > 45 ) {
theta[tailId] = 45;
dir = -dir;
}
}
Вы можете попробовать это с функцией пазухи. Выглядит лучше...
var theta = [0, 0, 0, 0, 0, 0, 180, 0, 180, 0, 20, 0];
var tailId = 11;
var phase = 0;
var step = 0.1;
function move() {
// TAIL
// convert from -1..1 => 0..45
theta[tailId] = 22.5 + (Math.sin(phase) * 22.5);
phase += step;
}