Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Imagens não estão carregando....

Olá!

Estou passando o caminho correto da imagem da bola, mas ela não carrega no jogo de jeito nenhum.

Vou passar abaixo meu código do sketch.js, o print do explorer do VSCode ...

let bolaImagem;

//posicao da bola let x = 200; let y = 200; const r = 25;

class Raquete { constructor(x) { this.x = x; this.y = height / 2; this.w = 10; this.h = 60; }

update () {

    //se a raquete é o jogador
    if(this.x < width / 2) {
        this.y = mouseY;
    } else {
        //se a bola está pra cima, vai pra cima 
        if(bola.y < this.y) {
            this.y -= 5;
        } else {
            //se a bola está embaixo, vai pra baixo
            this.y += 5;
        }

    }
    //limitar dentro da tela (acima)
    if(this.y < 0) {
        this.y = 0;
    }
    //limitar dentro da tela abaixo
    if(this.y > height - this.h) {
        this.y = height - this.h;
    }

}

desenha () {
    fill(color(255, 255, 255));
    rect(this.x, this.y, this.w, this.h);
}

}

class Bola { constructor() { this.r = 25; this.reset(); }

reset() {
    this.x = width / 2;
    this.y = height / 2;
    const velocidadeMaxima = 5;
    this.vx = Math.random() * velocidadeMaxima * 2 - velocidadeMaxima;
    this.vy = Math.random() * velocidadeMaxima * 2 - velocidadeMaxima;
}

update() {
    this.x += this.vx;
    this.y += this.vy;
    if (this.x < this.r || this.x > width - this.r) {
        this.reset();
    }
    if (this.y < this.r || this.y > height - this.r) {
        this.vy *= -1;
    }


    if(colideRetanguloCirculo(this.x, this.y, this.r, jogador.x, jogador.y, jogador.w, jogador.h) ||
    colideRetanguloCirculo(this.x, this.y, this.r, computador.x, computador.y, computador.w, computador.h)) {
        this.vx *= -1;
            this.vx *= 1.1;
            this.vy *= 1.1;
    }

}

desenha() {
    image(bolaImagem,this.x, -this.r, this.y, -this.r, -this.r * 2, this.r * 2);
    // fill(color(255, 0, 0))
    // ellipse(this.x, this.y, this.r * 2, this.r * 2);
}

}

// verifica a colisão entre um círculo e retângulo // onde círculo é raio e cx, cy // e retângulo é x, y, w, h function colideRetanguloCirculo(cx, cy, raio, x, y, w, h) { // se o círculo está a esquerda ou a direita do retângulo if (cx + raio < x || cx - raio > x + w) { return false; } // se o círculo está acima ou abaixo do retângulo if (cy + raio < y || cy - raio > y + h) { return false; } return true; }

let bola; let jogador; let computador;

function preload() { bolaImagem = loadImage('../assets/bola.png'); }

function setup() { createCanvas(800, 400); bola = new Bola(); jogador = new Raquete(30); computador = new Raquete(width - 30 - 10); }

function draw() { background(color(0, 0, 0)); bola.update(); bola.desenha(); jogador.update(); jogador.desenha(); computador.update(); computador.desenha(); }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Achei o problema!

Estava nessa linha:

image(bolaImagem,this.x, -this.r, this.y, -this.r, -this.r * 2, this.r * 2);

Não existem as vírgulas em this.x, -this.r. E sim: this.x - this.r,

Fica assim, o certo:

image(bolaImagem,this.x - this.r, this.y - this.r, - this.r * 2, this.r * 2);

Agora está funcionando!

Pessoal do time da Alura que faz a escrita da transcrição da aula precisa arruma o código.

O certo é assim:

desenha() { image(bolaImagem,this.x - this.r, this.y - this.r, this.r * 2, this.r * 2);

}

E está assim:

 desenha() {
            // desenha a imagem bola
           
           image(bolaImagem, this.x, -this.r, this.y, -this.r, -this.r * 2, this.r * 2);  //essa linha está errada
    
    // fill(color(255, 0, 0))
    // ellipse(this.x, this.y, this.r * 2, this.r * 2);
}