Scrivere Un 3d Engine Da Zero Tutorial 1
Primi Passi con p5.js: Cerchi che Cadono
Cos’è p5.js?
p5.js è una libreria JavaScript per creare grafica e animazioni interattive. È perfetta per chi vuole programmare in modo creativo senza troppa complessità. Se vai su editor.p5js.org puoi usarla online senza dover scaricare nulla.
Come Funziona
Ogni progetto p5.js usa due funzioni base:
setup()- si esegue una volta all’iniziodraw()- si ripete in loop (circa 60 volte al secondo)
Il Nostro Progetto
In questo tutorial creiamo un’animazione semplice: ogni click del mouse genera un cerchio giallo che cade verso il basso.
Il Codice Spiegato
1
2
3
4
const raggio = 20;
const fallSpeed = 0.2;
let x = 0, y = 0;
let circles = [];
Definiamo il raggio dei cerchi, la velocità di caduta e un array per memorizzare tutti i cerchi creati.
1
2
3
function setup() {
createCanvas(400, 400);
}
Creiamo un canvas di 400×400 pixel.
1
2
3
4
5
6
7
8
function draw() {
background(20, 190, 20);
x = mouseX;
y = mouseY;
strokeWeight(5);
point(x, y);
Ogni frame disegniamo uno sfondo verde e un punto che segue il cursore del mouse.
1
2
3
4
5
6
7
8
9
10
fill(255, 255, 0);
for(let i = 0; i < circles.length; i++) {
circle(circles[i][0], circles[i][1], raggio);
circles[i][1] += deltaTime * fallSpeed;
if(circles[i][1] >= height) {
circles[i][1] = 0;
}
}
}
Disegniamo tutti i cerchi gialli, li facciamo cadere e quando escono dal canvas li riportiamo in alto.
1
2
3
function mouseClicked() {
circles.push([x, y]);
}
Ogni click crea un nuovo cerchio.
1
2
3
4
5
function keyPressed() {
if(key === 'r') {
circles = [];
}
}
Premendo ‘r’ cancelliamo tutti i cerchi.
Provalo Subito
Vai su editor.p5js.org, copia il codice e premi play
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const raggio =20;
const fallSpeed = 0.2;
let x = 0,y = 0;
let circles = [];
function setup() {
createCanvas(400, 400);
}
function draw() {
background(20,190,20);
x = mouseX;
y = mouseY;
strokeWeight(5);
point(x,y);
strokeWeight(2);
fill(255,255,0); // r g b
for(let i=0; i<circles.length; i++){
circle(circles[i][0],circles[i][1],raggio);
circles[i][1] += deltaTime *fallSpeed;
if(circles[i][1] >= height){
circles[i][1] = 0;
}
}
}
function mouseClicked(){
circles.push([x,y]);
}
function keyPressed(){
if(key === 'r'){
circles = []
}
}