Алгоритм не начинается сначала

106
14 января 2021, 13:40

Имеется вот такой код

var cvs = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var block = new Image();
var bg = new Image();
block.src = 'block.png';
bg.src = 'bg.png';
var x = 240;
var lessX = -2;
var addX = 2;
var y = 10;
var addY = -2;
var lessY = 2;
function usl(){
  if(x > 10){
    x += lessX;
  }
  if(x <= 10){
    x = 10;
    addX = 0;
    y += lessY;
  }
  if(y >= 340){
    y = 340;
    lessY = 0;
    lessX = 0
    addX = 2;
    x += addX;
  }
  if(x >= 240){
    x = 240;
    addX = 0;
    y += addY;
  }
}
function draw(){
  ctx.drawImage(bg, 0, 0);
  ctx.drawImage(block, x, y);
  usl();
  if(x == 240 && y == 10){
    usl();
  }
  requestAnimationFrame(draw);
}
bg.onload = draw;

В функции draw() стоит условие, которое, по идее, должно запускать алгоритм заново ( квадратик встает в ту же самую точку, откуда и начинал, и предыдущие условия должны на нем работать ( то есть он снова должен пойти влево ) ).

if(x == 240 && y == 10){
    usl();
  }

Но он не идет. В чем может быть проблема ?

Answer 1

Вам нужно вернуть начальные значения для переменных lessX, addX, lessY и addY, чтобы ваш квадратик принял исходное направление

if (x == 240 && y == 10) {
    lessX = -2;
    addX = 2;
    lessY = 2;
    addY = -2;
}

Это условие лучше из draw перенести в конец функции usl, поскольку она у вас вычисляет позицию квадратика, а в draw оставить только рисование и вызов usl:

function draw(){
    ctx.drawImage(bg, 0, 0);
    ctx.drawImage(block, x, y);
    usl();
    requestAnimationFrame(draw);
}
READ ALSO
subline text 3 разделения вкладок

subline text 3 разделения вкладок

Подскажите пожалуйста, как сделать так, чтоб в ST3 на одном экране отображались сразу 2 окна, чтоб не постоянно не переключаться между ними

102
Как добавить массив в Dictionary C#

Как добавить массив в Dictionary C#

Есть Dictionary такого типа:

127
Плавное изменение цвета в unity

Плавное изменение цвета в unity

Нужно что бы спрайт плавное изменял свой цвет в красный оттенок ,а потом обратно в свой дефолтный (хочу сделать мигание)Возможно ли такое...

104
Telegram api ошибка dotnet

Telegram api ошибка dotnet

Всем привет! Сегодня решил попробовать написать бота для Telegram на c#Использовал dotnet

115