Как синхронизировать анимацию и движение объекта (персонажа)?
Здравствуйте.
Пытаюсь в js canvas создать движение персонажа как в игре "Как достать соседа".
Но сколько не пытался синхронизировать движение ног со скоростью перемещения, все равно ощущается скольжение при ходьбе.
Такой вопрос:
Как в игре "Как достать соседа" реализована ходьба персонажа, или существует ли формула по которой можно как нибудь синхронизировать анимацию и перемещение объекта?
Где-то во глубине своего кода я использую вот такое
- setInterval(10) - смотря насколько будет тормозить сам компьютер
- window.requestAnimationFrame - вызов функции реальной перерисовки канваса когда броузер этого сам желает
_draw - реальная перерисовка канваса
В твоем случае, возможно, нужно один раз включить permanentdraw
{ // ...
/**
* Инициирует непрерывную перерисовку контента. Для плавной анимации.
*/
permanentdraw: function () {
if (!!this._interval) return;
this._interval = setInterval(() => anima.draw(), 10);
},
/**
* останавливает анимацию
*/
clearpermanent: function () {
if (!this._interval) return;
clearInterval(this._interval);
this._interval = null;
},
/**
* отложенный draw - заявка на перерисовку. Можно частить, все равно не должно тормозить
*/
draw: function () {
if (!this._TO) {
let that = this;
this._TO = window.requestAnimationFrame(function () {
that._TO = false;
that._draw();
});
}
},
}
dom12, В смысле ? Не "дерганная" анимация - пропуск кадров, а движение ног на совпадает со скоростью перемещения самого персонажа ? Ну дык скорость анимации самого персонажа нужно увеличить. Ну или скорость уменьшить.
ksnk, В этом и проблема, я никак не могу подобрать скорость для анимации и перемещение (движение ног не совпадает со скоростью перемещения). Пытался вручную подобрать, дошёл плоть до сотых: 1,01.
Может существует формула по которой можно как нибудь синхронизировать.
К примеру - есть передвижение ног, обоих. Скорость (циклическая) смены кадров анимации передвижения - 1 секунда, к примеру. За это время персонаж перемещается на расстояние (которое видно по картинке персонажа) равное двойной длине шага - расстояние от начала одной ступни, до начала другой в кадре с максимальной шириной шага. Ну а там уже можно +- подрегулировать скорости
ksnk, Вроде нашёл проблему. Я снизил фпс в pixijs до 30. И теперь движение ног со скоростью перемещения стали синхронный. И теперь осталось понять как снизить фпс только у персонажа.