O Pingu

Por enquanto, usaremos o seguinte site para nossas imagens, o link a seguir leva diretamente a imagem do Pingu: https://caz-creates-games.itch.io/lil-penguin-character-sprite

Crie uma pasta chamada assets e adicione os arquivos terminados em .png a ela.

No arquivo personagem.js, adicione uma constante chamada CHAR_IDLE_IMG_PATH e atribua a ela o caminho para o arquivo idle. O caminho é sempre com referência ao local do seu arquivo sketch.js, portanto, o caminho ficará "assets/lil penguin idle.png”.

Adicione outra variável, usando var, chamada CHARIMG e deixe ela sem valor por enquanto.

No arquivo sketch.js, adicione o código abaixo, antes da função setup:

function preload() {
	CHARIMG = loadImage(CHAR_IDLE_IMG_PATH);
}

// Seu function setup()...

Imagens, músicas e qualquer tipo de mídia devem ser carregados dentro da função preload()!

Agora, volte para o arquivo personagem.js, e ao invés de um quadrado, use a função image para desenhar o Pingu (a imagem que carregamos) ao invés do quadrado.

A imagem, diferente do retângulo, não é alterada quando usamos o rectMode. Ela sempre é desenhada a partir do canto superior esquerdo. Para ajustar a posição do personagem, precisamos acessar a largura da imagem. Podemos fazer isso usando charSize. Seu canvas deve estar parecido com a imagem abaixo:

Untitled

O problema agora é que nosso Pingu virou o Michael Jackson! Precisamos inverter a imagem quando trocar a direção. Comece criando uma variável baseSpeed, usando o let, que possui valor inicial 3. Agora, caso não exista, crie outra variável chamada speed que não possui um valor inicial. Quando o personagem mover para frente (direita) o valor de speed deve ser baseSpeed. Já quando mover para esquerda, deve ser -baseSpeed.

Agora, na sua função drawCharacter(), adicione os comandos push() como seu primeiro comando e o pop() como sendo o último. Essas funções fazem com que as transformações que fizermos sejam aplicadas apenas aqui. Por exemplo, se usássemos um rectMode(CENTER), ele se aplicaria apenas entre o push() e pop().

Dessa forma, o código do seu drawCharacter() deve estar parecido com o abaixo:

function drawCharacter() {
	push();
	image(CHARIMG, charX - charSize/2, charY - charSize/2);
	pop();
}

Vamos para a parte complicada, que é inverter a imagem horizontalmente. Para isso, precisaremos inverter o próprio eixo X! Primeiro, precisamos identificar quando o nosso personagem está voltando. Podemos usar nossa variável speed para isso. Tendo identificado o momento no qual o personagem está voltando, nós invertemos o eixo X e alteramos a coordenada X do personagem para manter a posição. Use o código abaixo para isso.

// Inverte o eixo X fazendo com o Pingu mude de direção
scale(-1, 1);
// Altera a posição X na qual o personagem é desenhado, mantendo 
// a posição quando o eixo é invertido
image(CHARIMG, -(charX + charSize/2), charY - charSize/2);

pingu-moving.mp4

Dando vida ao Pingu

Atualmente, nosso pinguim parece um peso morto. Vamos animar as coisas por aqui dando um pouco de movimento para ele.