Как удалять и повторять изображения?

Я заставил изображение двигаться справа налево. Но я хочу добавить функцию, которая, когда изображение достигает x: 50, это изображение удаляется и рисовать влево.

Я пытался использовать оператор управления, например «если», но он не работает.

var canvas = document.getElementById("Canvas");
var ctx = canvas.getContext("2d");

var img = new Image();
img.src = "img1.png";
var speed = 0;
var xpos = 800;
var CXpos = 0;  //changeing xpos
var result = Math.floor(Math.random() * 500) + 1;

function icon(){
    ctx.beginPath();
    speed -= 1;
    CXpos = xpos + speed;
    ctx.drawImage(img, CXpos, result, 60, 60);
    if (Cxpos == 50){
        canvas.width = canvas.width;    //I don't know it's correct code?
        icon();
    }
    ctx.closePath();
}

function iconypos(){
    var num = Math.floor(Math.random*100)+1
    return num;
}

function draw(){
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    icon();
}

setInterval(draw, 10);
to draw left Что вы имеете в виду? Кроме того, canvas.width = canvas.width; ничего не сделает (ширина холста останется прежней).
Mosh Feu 29.05.2019 17:44

@MoshFue «рисовать влево» означает, что изображение удаляется в точке X: 50, затем воссоздается справа и перемещается влево.

Hyeonbinshin 29.05.2019 17:58

Значит, он будет двигаться от x:50 вправо бесконечно, верно?

Mosh Feu 29.05.2019 18:04

Нет, изображение, которое достигает x:50, удаляется, и появляется новое изображение. Изображение не движется прямо в точке x : 50.

Hyeonbinshin 29.05.2019 18:10

Ok. Откуда новый образ. Я имею в виду, у него такой же src или он совершенно другой?

Mosh Feu 29.05.2019 18:11

src - то же самое.

Hyeonbinshin 29.05.2019 18:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я вас правильно понял, это то, что вы ищете. Просто «сбросьте» переменную speed до начальной точки (то есть 0).

Нет необходимости снова вызывать icon(), потому что следующий тик в интервале все равно вызовет это.

var canvas = document.getElementById("Canvas");
var ctx = canvas.getContext("2d");

var img = new Image();
img.src = "https://avatars2.githubusercontent.com/u/15933454?s=60&v=4";
var speed = 0;
var xpos = 800;
var CXpos = 0;  //changeing xpos
var result = Math.floor(Math.random() * 500) + 1;

function icon(){
    ctx.beginPath();
    speed -= 1;
    CXpos = xpos + speed;
    ctx.drawImage(img, CXpos, result, 60, 60);
    if (CXpos == 50){
        speed = 0;    //I don't know it's correct code?
        //icon();
    }
    ctx.closePath();
}

function iconypos(){
    var num = Math.floor(Math.random*100)+1
    return num;
}

function draw(){
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    icon();
}

setInterval(draw, 10);
<canvas id = "Canvas" width = "800" height = "350"></canvas>

Конечно, Ваш ответ сказал мне: «Тебе следует больше учиться». В любом случае, большое спасибо

Hyeonbinshin 29.05.2019 19:38

Мы все постоянно учимся :) Рад, что смог помочь. Пожалуйста, принимать, это может помочь другим людям.

Mosh Feu 29.05.2019 23:35

Другие вопросы по теме