@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
  • Вопрос задан
  • 353 просмотра
Решения вопроса 1
@kodwi Автор вопроса
https://moikrug.ru/kodwi
Проблема была в увеличенном масштабе страницы канваса. Сбросил на 100% и все ок.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@GreatRash
Почему не очищать весь канвас?
Ответ написан
Ваш ответ на вопрос

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

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