Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2020, 13:02
Новичок на форуме
Отправить личное сообщение для rabishchuk Посмотреть профиль Найти все сообщения от rabishchuk
 
Регистрация: 25.08.2020
Сообщений: 4

js в visual code графика не отображается
Обновляю страницу а экран белый,в чем может быть проблема подскажите пожалуйста

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

var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeUP = new Image();
var pipeBottom = new Image();

bird.src = "img/bird.png";
bg.src = "img/bg.png";
fg.src = "img/fg.png";
pipeBottom.src = "img/pipeBottom.png";
pipeUP.src = "img/pipeUp.png";

function draw(); {
    ctx.drawImage(bg, 0, 0);
}

pipeBottom.onload = draw;
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2020, 13:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

function draw(); {

Прям так и есть или только тут случайно?
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2020, 13:34
Новичок на форуме
Отправить личное сообщение для rabishchuk Посмотреть профиль Найти все сообщения от rabishchuk
 
Регистрация: 25.08.2020
Сообщений: 4

тут случайно ,но изображение не выводить ,все перепробывал
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2020, 13:45
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от rabishchuk
pipeBottom.onload = draw;
pipeBottom загружается, а bg, скорее всего, не успевает
Ответить с цитированием
  #5 (permalink)  
Старый 28.08.2020, 16:02
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Что то типа такого надо

function loadImg (img, src) {
  return new Promise ( (res, rej) => {
    img.onload = () => res()
    img.onerror = () => rej()
    img.src = src
  })
}

var cvs = document.getElementById("canvas");
var ctx = cvs.getContext("2d");
 
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeUP = new Image();
var pipeBottom = new Image();

function draw(); {
    ctx.drawImage(bg, 0, 0);
}
  
let ap = [
  loadImg(bird, "img/bird.png"),
  loadImg(fg, "img/fg.png"),
  loadImg(pipeUp, "img/pipeUp.png"), // Если тоже нужно ждать
]
loadImg(pipeUp, "img/pipeUp.png")
  .then(() => Promise.allSettled(ap))
  .then(() => draw());

Последний раз редактировалось voraa, 28.08.2020 в 16:37.
Ответить с цитированием
  #6 (permalink)  
Старый 28.08.2020, 16:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от voraa
img.onload = () => res()

img.onload = res;
Ответить с цитированием
  #7 (permalink)  
Старый 28.08.2020, 16:29
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Я так пишу для однообразия (для себя)
Просто если, вдруг потом выяснится, что лучше промису возвращать какое то значение, то просто подставить его.
Например
img.onload = () => res(img)
img.onerror = () => rej({reason:'load error'})
Ответить с цитированием
  #8 (permalink)  
Старый 28.08.2020, 16:40
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

удобнее сразу создавать картинку в loadImg, и резолвить ее в промис
function loadImg (src) {
  return new Promise ( (res, rej) => {
    const img = new Image();
    img.onload = () => res(img);
    img.onerror = () => rej();
    img.src = src;
  });
}
Ответить с цитированием
  #9 (permalink)  
Старый 28.08.2020, 16:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Может и удобнее, но тогда все функции переписывать.
В частности draw Иначе до конкретной картинки bg трудно добраться.
К тому же, в случае ошибки, img после allSettled не получить.
Там в ответе после rej() будет не img, а {status:'reject', reason:undefined}
Ответить с цитированием
  #10 (permalink)  
Старый 28.08.2020, 19:42
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

А "моднее" так эту функцию сделать

function loadImg (img, src) {
  img.src = src
  return img.decode().finally (() =>img)
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрограммировать 3 графика на JS frbd Работа 3 15.12.2016 20:25
Графика и JS - как изменить контрастность? Veterinar Элементы интерфейса 6 01.03.2014 18:01
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Кто-нибудь пишет JS на Visual Studio 2012? grundick Оффтопик 17 12.03.2013 18:06
Visual studio и js jazzz13 Общие вопросы Javascript 0 13.11.2011 13:17