функция копирования не распознает изображение на другом холсте в p5js

#javascript #processing #p5.js

#javascript #обработка #p5.js

Вопрос:

Я пытаюсь создать эффекты ‘slitscan’.
Я установил 2 холста. Один справа предназначен для исходного изображения, а другой — для эффекта сканирования.
Когда я попробовал это с текстовой функцией, она работает отлично, однако с изображением функция копирования выдает мне сообщение об ошибке.

сообщение об ошибке

Это код p5, который я написал

 let a1, a2;
let cv1, cv2;
let dy = 0;

let s1 = function(p) {
  p.setup = () => {
    cv1 = p.createCanvas(300, 300);
    p.background(150);
    cv1.position(0, 0);
  }

  p.draw = () => {
    p.copy(cv2, 0, dy, 400, 1, 0, dy, 400, 1);
    
    if (dy > cv2.height) {
      dy = 0;
    } else {
      dy  = 1;
    } 
  }
}
a1 = new p5(s1);

let s2 = function(p) {
  let img;

  p.preload = () => {
    img = p.loadImage('https://pbs.twimg.com/profile_images/635910989498724356/uY4bc8q2.jpg');
  }

  p.setup = () => {
    cv2 = p.createCanvas(300, 300);
    cv2.position(300, 0);
  }

  p.draw = () => {
    p.background(30);
    p.imageMode(p.CENTER);
    p.image(img, p.mouseX, p.mouseY);
  }
}
a2 = new p5(s2);
  

Кроме того, если у вас есть идея получше создать мульти-холст или какие-либо предложения по поводу моего кода, пожалуйста, оставьте комментарий.
Спасибо,

Ответ №1:

В вашем s1 эскизе вы пытаетесь что-то делать с холстом cv2 . Тем не менее, этот холст создается только позже в вашем эскизе.

Чтобы исправить это, просто измените порядок ваших двух эскизов, т. Е. Вызовите a1 = new p5(s1); after a2 = new p5(s2); (не имеет значения, когда вы определяете s1 and s2 , только когда вы их создаете).

Посмотрите, например, этот эскиз редактора p5.