#javascript #html #processing #p5.js
Вопрос:
Я написал некоторый код для очень быстрого последовательного отображения изображений, однако между ними часто возникают промежутки, когда загружаются изображения, что чрезвычайно раздражает. Мне было бы любопытно, как я мог бы избавиться от этих больших пробелов. У меня есть около 1000 изображений, поэтому я пытаюсь сделать этот код как можно менее утомительным. Моей текущей мыслью было бы каким-то образом загрузить их в память сначала с помощью p5.js. Все, что угодно, помогает!
let faces = [];
let i = 0
function preload(){
window.onload = setInterval(() => {
i
if(i > 999){
i = 0;
}
faces[i] = loadImage(`aberdeen_results/${i}.jpg`)
}, 400);
}
function setup(){
createCanvas(innerWidth,innerHeight);
}
function draw(){
background(256)
image(faces[i], 450, 150,);
}
Ответ №1:
По моему опыту, если это изображение заполнит весь экран, вы можете использовать
background(faces[i]);
и это уступает меньшему отставанию, может быть, это помогло бы.
Ответ №2:
В вашем коде были некоторые недостатки, так как он выдавал ошибки с моей стороны.
Вам не нужно использовать window.onload
, и setInterval
в документации inside preload()
.
P5 говорится: «Если определена функция предварительной загрузки, setup() будет ждать завершения любых вызовов загрузки внутри». Поскольку вы непрерывно загружали изображение с помощью loadImage()
inside setInterval
, setup()
оно никогда не будет вызвано.
Вы можете использовать setInterval
внешнюю часть preload()
для обновления i
.
(Я использовал только 10 изображений для демонстрационных целей)
Фиксированный Код:
let faces = [];
let i = 0
function preload() {
for (let k = 0; k < 10; k ) {
faces[k] = loadImage(`https://picsum.photos/450/150?random=${k}`)
}
}
function setup() {
createCanvas(window.innerWidth, window.innerHeight);
}
setInterval(() => {
i ;
if (i > 9) {
i = 0;
}
}, 400)
function draw() {
background(256)
image(faces[i], 0, 0);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.min.js" integrity="sha512-N4kV7GkNv7QR7RX9YF/olywyIgIwNvfEe2nZtfyj73HdjCUkAfOBDbcuJ/cTaN04JKRnw1YG1wnUyNKMsNgg3g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
Кроме того, не рекомендуется загружать все 1000 изображений, так как это займет огромное количество оперативной памяти и может привести к сбою браузера. У меня не было никаких проблем с пробелами между изображениями (возможно, bcoz только из 10 изображений, но с 1000 изображениями наиболее вероятной причиной разрыва была бы оперативная память).