Задать вопрос
@kodwi
https://moikrug.ru/kodwi

Почему остается шлейф при анимации?

function draw_obj(obj, ctx) {
    if (obj.drawn == true) {
        ctx.clearRect(obj.coord_x,  obj.coord_y,
                             obj.width, obj.height);
    }

    switch (obj.draw_type) {
        case cfg.draw_types.PLAYER:
            ctx.beginPath();

            ctx.rect(obj.coord_x, obj.coord_y, obj.width, obj.height);

            ctx.closePath();
            ctx.fillStyle = obj.filling;
            ctx.fill();

            break;
    }

    requestAnimationFrame(function() {draw_obj(obj, ctx);});

    obj.drawn = true;
    obj.coord_y += obj.speed;
}


По идее, перед каждой отрисовкой прямоугольник должен очищаться, но на деле остается подобный шлейф на любой скорости:
d816b34cff0e42f3ab0a76d2884b7ad5.png
Что я делаю не так?

UPD:

Нашел проблему, переписал так:

function draw_obj(obj, ctx) {
    if (obj.drawn == true) {
        ctx.clearRect(
            obj.coord_x,
            obj.coord_y,
            obj.width,
            obj.height);
    }

    obj.coord_y += obj.speed;
    obj.coord_x += obj.speed;
    obj.drawn = true;

    ctx.beginPath();

    ctx.rect(obj.coord_x, obj.coord_y, obj.width, obj.height);

    ctx.closePath();
    ctx.fillStyle = obj.filling;
    ctx.fill();

    requestAnimationFrame(function() {draw_obj(obj, ctx);});
}


Все равно шлейф:

ccd9cea89684481d843032d9fd608ad9.png
  • Вопрос задан
  • 369 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Skillbox
    Разработчик игр на Unity с нуля
    3 месяца
    Далее
  • OTUS
    Android Developer
    10 месяцев
    Далее
Решения вопроса 1
@kodwi Автор вопроса
https://moikrug.ru/kodwi
Проблема была в увеличенном масштабе страницы канваса. Сбросил на 100% и все ок.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@GreatRash
Почему не очищать весь канвас?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы