title | date | draft | toc | headercolor | onderwerp |
---|---|---|---|---|---|
Maak je eigen kerstkaart-animatie met P5.js! 🎄 🌟 |
2024-12-03 20:51:01 +0200 |
false |
true |
teal-background |
P5js |
Zo kort voor kerst gaan we een kerstkaart programmeren, compleet met een kerstboom, kerstballen, sneeuw en een leuke kerstwens. Kun jij de sneeuwvlokken echt laten vallen?
We maken de kerstkaart met P5.js. Volg de handleiding stap voor stap en speel bij elke stap met de verschillende opties!
-
Ga in je browser naar editor.p5js.org.
In het venster links kun je programmeren. Als je op de afspeelknop linksbovenaan klikt dan wordt je code uitgevoerd. Je ziet het resultaat in het venster rechts. Probeer het maar eens.
-
Begin aan je kerstkaart.
- Laten we beginnen door de achtergrond zwart te maken. Dat doe je door de functie
background()
een waarde van 0 te geven. - Voor wat we zo gaan doen is het belangrijk dat
background()
insetup()
staat en niet indraw()
. Selecteer die hele regel, knip en plak hem op een regel direct ondercreateCanvas()
. - Maak je kerstkaart passend door de nummers in
createCanvas(400, 400)
te veranderen. Je kunt ook de nummers vervangen doorwindowWidth
enwindowHeight
, dan past het altijd, dus ook als je het venster later groter maakt. - Je hele script ziet er dan zo uit:
function setup() { createCanvas(windowWidth, windowHeight); background(0); } function draw() { }
- Klik op de afspeelknop om te kijken of het goed werkt.
- Laten we beginnen door de achtergrond zwart te maken. Dat doe je door de functie
-
Begin met een kerstboom tekenen:
- Een kerstboom heeft een stam en groene takken.
- Voor de stam kunnen we een rechthoek tekenen met de functie
rect()
. Zet deze code in het script, nábackground()
en boven de gekrulde haak}
diesetup()
afsluit:rect(90, 100, 20, 20); // x, y, breedte, hoogte
- De takken kun je tekenen met een driehoek. Gebruik daarvoor
triangle()
:triangle( 60,100, 100,10, 140,100 ); // links, top, rechts
-
Run je code! Zie je een kerstboom? Goed gedaan! 🎉
Zoals je ziet gebruikt P5.js een coördinatenstelsel om vormen te tekenen op een bepaalde plek op het scherm. Dit zijn de belangrijkste punten om te begrijpen:
- Coördinaten worden weergegeven als
(x, y)
.x
is de horizontale positie,y
de verticale positie. - Het linkerbovenhoekpunt van het venster is het beginpunt. De coördinaten van dit punt zijn
0,0
. - x betekent 'zoveel pixels vanaf de linkerkant'. Hoe groter het getal voor x, des te verder naar rechts het is.
- y betekent 'zoveel pixels vanaf de bovenkant'. Hoe groter het getal voor y, des te verder naar beneden het is.
-
Maak de kerstboom een heel stuk groter! 🎄
Maak de kerstboom bijna even hoog als het venster. Begin met de takken.
- Een driehoek teken je door in
triangle()
de coördinaten op te geven van drie hoekpunten. - Om een mooie grote driehoek te tekenen moet je even zoeken naar de juiste getallen. Het is een kwestie van uitproberen. Verander dus de coördinaten voor de drie punten in
triangle()
.triangle( x,y, x,y, x,y );
- Als je wil kun je je boom ook tekenen met drie overlappende driehoeken van verschillende grootte, door nog twee regels met
triangle()
toe te voegen.
- Een driehoek teken je door in
-
Verplaats de stam 🪵
-
Om de rechthoek weer onder de driehoek te plaatsen verander je de eerste twee argumenten van
rect()
:- het eerste getal is
x
, het aantal pixels naar rechts - het tweede getal is
y
, het aantal pixels naar beneden. - Deze coördinaten zijn de linkerbovenhoek van de rechthoek.
- het eerste getal is
-
Om de grootte van de rechthoek te veranderen pas je de laatste twee argumenten van
rect()
aan.rect(x, y, breedte, hoogte);
-
Geef nu je kerstboom wat kleur om er wat leven in te blazen!
-
Wat betekenen
fill()
enstroke()
?- Met
fill(r, g, b)
geef je de vormen een kleur. stroke(r, g, b)
bepaalt de randkleur.strokeWeight()
maakt de rand dikker of dunner.
Je kunt kleuren opgeven met een getal tussen 0 en 255. 255 betekent 'helemaal aan' en 0 betekent 'helemaal uit'. Dus als je bijvoorbeeld een vorm fel rood wil kleuren, dan zet je er een
fill()
boven met rood vol aan en groen en blauw op 0:fill(255, 0, 0);
- Met
-
Probeer het:
- Voeg dit toe na
background(0)
in de code:stroke(255, 0, 0); // Rode randen strokeWeight(4); // Maak de randen dikker fill(255, 200, 255); // lichtroze
- Voeg dit toe na
-
Ronde randen
- Als je dat mooier vindt, kun je
strokeJoin(ROUND);
gebruiken om de boom afgeronde randen te geven. - Als je een vorm helemaal geen rand wil geven dan kun je er
noStroke();
boven zetten.
- Als je dat mooier vindt, kun je
-
Speel met de kleuren!
- Probeer andere getallen bij
fill()
(bijvoorbeeld bruinfill(139, 69, 19);
). - Geef de stam, de takken en de rand elk een andere kleur.
- Op de website rgbcolorpicker.com kun je gemakkelijk kleuren uitkiezen. Als je een Mac hebt, kun je de app Color Picker gebruiken.
- Probeer andere getallen bij
Laten we kerstballen toevoegen als je klikt met de muis.
-
Kopiëer deze code en plak hem onderaan je script:
function mousePressed() { let r = random(255); // willekeurig rood let g = random(255); // willekeurig groen let b = random(255); // willekeurig blauw let grootte = random(10, 30); // willekeurige grootte fill(r, g, b); // Gebruik de random kleuren noStroke(); // Geen rand circle(mouseX, mouseY, grootte); // Teken een bal op de muispositie }
(Zorg dat je deze code helemaal onderaan zet, dus ná de gekrulde haak
}
die dedraw()
-functie afsluit.) -
Klik op de boom! 🌲
- Zie je hoe elke klik een kerstbal toevoegt?
mousePressed()
is een functie die P5.js uitvoert elke keer dat je op de muis klikt.- De functie
random()
geeft een willekeurig getal tussen 0 en het nummer dat je opgeeft. Elke kerstbal krijgt dus andere mix van kleuren. - Als je twee getallen opgeeft bij
random()
dan krijg je een willekeurig getal tussen die twee waarden. Op die manier zijn de kerstballen dus steeds een andere grootte, maar niet kleiner dan 10 pixels en niet groter dan 30.
-
Goudkleurige rand? 🌟
Als je de kerstballen een goudkleurige rand wil geven, vervang `noStroke()' dan door:
stroke(190,166,40); strokeWeight(3);
Een kerstkaart is niet compleet zonder een kerstwens!
-
Gebruik de
text()
functie:- Voeg dit toe aan de
setup()
functie, ná het tekenen van je kerstboom:noStroke(); // geen rand textSize(30); // grootte van de letters fill(246, 246, 255); // tekstkleur text("Fijne kerst!", 50, 50); // Tekst en positie
- (Als je deze regels bóven de
rect()
entriangle()
zou zetten dan zou de kerstboom over je tekst heen kunnen vallen.)
- Voeg dit toe aan de
-
Run je code:
- Zie je de tekst bovenaan? 🎉
-
Maak de tekst groot en kleurig
- Hoe groter het getal in
textSize();
des te groter de tekst groter. Maak je kerstwens lekker beeldvullend! - Verander de coördinaten in
text()
om de tekst in het midden van je kerstkaart te zetten. Gebruikheight/2
als de y-positie om de tekst automatisch in het midden van het venster te zetten. - Pas
fill()
aan om de kleur van de tekst wat meer kerstig te maken.
- Hoe groter het getal in
-
Kies je eigen lettertype! ✍🏼 𝒦ℰℛ𝒮𝒯
-
Je kunt een eigen lettertype gebruiken, maar daarvoor heb je wel een account nodig op p5js.org. Klik rechtsbovenaan je script op 'sign up'. Als je daar nu geen zin in hebt, ga dan hieronder verder met de stap 'Laat het sneeuwen'.
-
Zoek een leuk lettertype, bijvoorbeeld op 1001fonts.com.
-
Als je er één gevonden hebt die je leuk lijkt, klik dan op 'download' en sla hem op op je computer.
-
Waarschijnlijk komt het lettertype binnen als een zip-bestand en moet je het eerst uitpakken. Vraag één van de mentoren om hulp als dat niet lukt of als je niet weet hoe dat moet.
-
-
Voeg het lettertype toe aan je project:
- Klik in je P5.js-editor op het pijltje
>
onder de afspeelknop, dus naast 'sketch.js'. Je ziet nu de bestanden van je animatie. - Klik op de + bovenaan het lijstje en kies voor 'upload file'.
- Sleep je lettertype-bestand naar het venster dat nu opent (of klik op het venster om het bestand op te zoeken).
- Je ziet nu in het rijtje links het toegevoegde bestand. Klik er één keer op. Je kunt nu bovenaan de hele bestandsnaam selecteren en kopiëren (de naam eindigt op
.ttf
of.otf
).
- Klik in je P5.js-editor op het pijltje
-
Laad en gebruik het lettertype in je code:
- Ga terug naar je script door te klikken op 'sketch.js'.
- Nu gaan we eerst je letterype laden. Neem deze code over, helemaal bovenaan in je script en plak de naam van het lettertype in de functie
loadFont()
. Het zou er zo uit moeten zien:let font = 'BerkshireSwash-Regular.ttf'; function preload() { font = loadFont(font); }
- Nu het lettertype geladen is kun je P5.js laten weten dat je dat lettertype wil gebruiken voor je kerstwens. Zet dit commando in
setup()
, boven de regel mettext()
van daarstraks:textFont(font);
-
Bewonder het resultaat 📝 😍
Nu wordt het pas echt interessant. We gaan het laten sneeuwen, en daarvoor gaan we objecten gebruiken.
Het helpt als je een beetje de ruimte hebt om te programmeren, dus klik op ∨ naast 'clear' om het console-venster weg te klikken, en schuif het preview-venster wat verder naar rechts.
-
Wat is een object? 🛠️
- Objecten zijn een manier om variabelen en functies bij elkaar te houden die bij één onderdeel in je programma horen. (In ons geval is dat een sneeuwvlok.)
-
Waarom gebruiken we objecten?
Een rondje tekenen is in P5.js heel makkelijk. Dat zag je net al bij de kerstballen. Om zo'n rondje als een sneeuwvlok naar beneden te laten gaan heeft hij een paar dingen nodig:
- eigenschappen: Waar is de vlok? Hoe groot is hij?
- gedrag: Wat kan de vlok doen? (Bijvoorbeeld vallen.)
We kunnen variabelen maken om de x- en y-positie van dat rondje te onthouden en die positie elke keer dat
draw()
wordt uitgevoerd een klein beetje veranderen. Op die manier kunnen we rondjes naar beneden laten vallen.Dat is best eenvoudig, maar het wordt veel ingewikkelder als we een flinke sneeuwbui willen. Dan hebben we een paar honderd sneeuwvlokken nodig die allemaal een eigen positie, grootte en snelheid hebben. Daarvoor hebben we ook honderden variabelen nodig en die willen we niet één voor één klaarzetten want dat is veel te veel werk.
Daarom gaan we voor elke sneeuwvlok een apart object maken, zodat elke sneeuwvlok zelf kan onthouden waar hij is en weet waar hij heen moet.
-
Maak een sjabloon voor je objecten
-
Een
class
is een soort sjabloon, in ons geval van hoe een sneeuwvlok eruitziet. We hoeven het sjabloon maar één keer te maken en dan kunnen we op basis daarvan heel veel objecten maken die hetzelfde zijn. -
We noemen onze class 'Sneeuwvlok'. Zet hem helemaal onderaan in je script, dus ná de gekrulde haak van
mousePressed
:class Sneeuwvlok { constructor() { this.startX = random(windowWidth); this.posX = this.startX; this.posY = 0; this.grootte = random(1, 5); this.valsnelheid = random(1, 5); } }
-
De
constructor
is een functie die alleen uitgevoerd wordt als een nieuw object wordt aangemaakt op basis van dezeclass
. -
In deze constructor zetten we variabelen klaar (in een
class
heten dat attributen). Dit zijn ze:startX
voor de startpositie; elke sneeuwvlok begint op een andere willekeurige horizontale plek tussen 0 en de breedte van het venster.posX
is steeds de horizontale positie. We kunnen straks de sneeuwvlok laten dwarrelen, maar hij begint op de startpositie.posY
is de verticale positie en die begint bovenaan, dus op 0.grootte
onthoud hoe groot deze sneeuwvlok is, en dat kan verschillen tussen 1 en 5 pixels breed.valsnelheid
wisselt ook tussen de 1 en 5 pixels, zodat de sneeuwvlokken niet allemaal even snel vallen.
-
this.
voor elke variabele betekent 'we bedoelen de variabele van dit object'. We hebben tenslotte een heleboel sneeuwvlokken uit elkaar te houden!
-
-
Geef de class functies
- Nu we attributen hebben gedefiniëerd voor onze sneeuwvlokken, gaan we functies toevoegen. Functies in een
class
worden methoden genoemd. - Met de methoden zorgen we dat de sneeuwvlokken ook iets kunnen doén, namelijk vallen. 😆
- Zet de methoden
verplaats()
enteken()
in de class, direct onder de gekrulde haak die de constructor afsluit:verplaats() { this.posY += this.valsnelheid; this.posX += random(-2, 2); } teken() { fill(255); noStroke(); circle(this.posX, this.posY, this.grootte); }
- Elke keer dat
verplaats()
wordt aangeroepen, wordt de y-positie groter met het aantal inthis.valsnelheid
. - We verplaatsen
posX
twee pixels naar links of naar rechts om de sneeuw een beetje te laten dwarrelen. - Elke keer dat
teken()
wordt aangeroepen, wordt een witte cirkel (zonder rand) getekend op de positieposX,posY
met de opgegeven grootte.
- Nu we attributen hebben gedefiniëerd voor onze sneeuwvlokken, gaan we functies toevoegen. Functies in een
-
Maak objecten op basis van de class
- Helemaal bovenaan in je script zetten we een lijst klaar waar we nieuwe objecten aan toe kunnen voegen:
let sneeuwvlokken = [];
- Nu kun je in
draw()
steeds opnieuw een nieuwe sneeuwvlok toevoegen aan de lijst:sneeuwvlokken.push(new Sneeuwvlok());
- Helemaal bovenaan in je script zetten we een lijst klaar waar we nieuwe objecten aan toe kunnen voegen:
-
Laat maar komen die sneeuwstorm! ☃️
- Om je sneeuwvlokken allemaal te laten zien, moeten we ze in
draw()
steeds opnieuw verplaatsen en tekenen. Dat doen we door met een for-loop alle objecten in de lijst af te gaan en de methoden van elk object aan te roepen:for (var s in sneeuwvlokken) { sneeuwvlokken[s].verplaats(); sneeuwvlokken[s].teken(); }
- Run je code maar eens!
- Hé, maar nu zie je alleen maar strepen! Meer een soort natte sneeuw 😧 Dat kun je fiksen door bovenaan in
draw()
steeds opnieuw een nieuwe achtergrond te tekenen voordat je de sneeuwvlokken tekent:background(0);
- Run je code opnieuw! Mooier zo? (Het klopt dat de rest van de kerstkaart nu weg is, dat gaan we zo fiksen. 👩🏻💻)
- Hoe kun je het harder laten sneeuwen? Er is een makkelijke manier om twee keer zo vaak een sneeuwvlok te maken...
- Om je sneeuwvlokken allemaal te laten zien, moeten we ze in
-
Sneeuw combineren met de rest van de kerstkaart ☃️
-
Nu hebben we er dus wel een probleem bij: de rest van de kerstkaart is verdwenen. Dat komt doordat we nu in
draw()
steeds de achtergrond opnieuw tekenen en alles dat we daarvoor getekend hebben uitwissen. -
We gaan dat probleem oplossen door een plaatje te bewaren van onze kerstkaart, en die steeds opnieuw te tekenen vóórdat we de sneeuwvlokken tekenen.
-
Maak een variabele aan om het plaatje op op te slaan, helemaal bovenaan je script:
let kerstwens;
In
setup()
, ná het tekenen van de kerstboom en kerstwens:kerstwens = createGraphics(width, height); kerstwens.image(get(), 0, 0);
-
En in
draw()
laat je steeds opnieuw dat plaatje zien:background(0); // deze regel mag je weer weghalen image(kerstwens, 0, 0);
-
Probeer het maar, als het goed is dan zie je nu de sneeuw over je kerstkaart heen!
-
De kerstballen zijn nog steeds niet te zien, omdat die niet bestonden toen we het plaatje van je kerstkaart maakten. Dat kun je oplossen door ze aan dat plaatje toe te voegen. Dat doe je door
kerstwens.
voor de functies te zetten inmousePressed()
:kerstwens.fill(r, g, b); kerstwens.stroke(190, 166, 40); kerstwens.strokeWeight(3); kerstwens.circle(mouseX, mouseY, grootte);
-
-
Waarom sneeuwt het steeds langzamer?
-
Je ziet dat de animatie al gauw heel traag wordt. Dat komt doordat er in hoog tempo sneeuwvlokjes bij komen, ongeveer 60 per seconde (zo vaak wordt
draw()
uitgevoerd). -
De lijst waar al die objecten in wordt bijgehouden, de variabele
sneeuwvlokken
, wordt dus ook steeds langer. -
De oplossing voor dit probleem is een if-statement. Daarmee kun je P5.js een vraag laten stellen. In dit geval is die vraag: is een sneeuwvlok al verder naar beneden gevallen dan de hoogte van mijn scherm? Als het antwoord ja is dan halen we dat object uit de
sneeuwvlokken
-lijst. -
We stoppen het if-statement in een nieuwe methode
sneeuwruimen()
in de classSneeuwvlok
:sneeuwruimen() { if (this.posY > windowHeight) { return true; } }
-
sneeuwruimen()
vertelt nu dus of het waar is dat dat sneeuwvlokje al gevallen is. -
Nu kunnen we in de for-loop in
draw()
deze nieuwe methode aanroepen, direct na de regel metteken()
. Dat ziet er dan zo uit:for (var s in sneeuwvlokken) { sneeuwvlokken[s].verplaats(); sneeuwvlokken[s].teken(); let gevallen = sneeuwvlokken[s].sneeuwruimen(); // als het vlokje gevallen is, verwijder het object dan uit de lijst if (gevallen == true) { sneeuwvlokken.splice(s, 1); } }
-
Werkt de animatie nu soepeler?
-
-
Sneeuw hoort te dwarrelen, toch?
- We laten de sneeuw nu een klein beetje dwarrelen met de
random
-functie, maar het ziet er veel mooier uit als jenoise()
gebruikt. - Voeg dit toe aan de constructor:
this.xoff = random(3000);
- In
verplaats()
:this.posX += random(-2, 2); // deze regel haal je weg this.posX = this.startX + map(noise(this.xoff), 0, 1, -250, 250); this.xoff += 0.002;
- Je kunt de sneeuw wilder laten dwarrelen met een hogere waarde in de laatste regel, bijvoorbeeld 0.008.
- Als je meer wil weten over hoe
noise()
werkt, kijk dan deze video over Perlin noise van Daniel Shiffman (in het Engels, maar je kunt de automatische vertaling en ondertitels aanzetten). Je kunt ook de voorbeelden op p5js.org bekijken.
- We laten de sneeuw nu een klein beetje dwarrelen met de
-
De sneeuw laten liggen ☃️
- Eigenlijk heb je pas echt iets aan sneeuw als het lekker blijft liggen. Laten we zorgen voor een pak sneeuw op de boom, de letters en de grond!
- Om te beginnen maken we een variabele aan, helemaal bovenaan ons script:
let paksneeuw;
- In
setup()
vertellen we P5.js datpaksneeuw
een plaatje moet worden met dezelfde afmetingen als ons venster:paksneeuw = createGraphics(width, height);
- Dat plaatje gaan we in
draw()
elke keer laten zien, nádat we het plaatje met de boom en de kerstwens hebben neergezet:image(kerstwens, 0, 0); // deze staat er dus al image(paksneeuw, 0, 0); // deze komt er nu bij
- In de functie
sneeuwruimen()
vragen we al of de sneeuwvlok al voorbij de hoogte van het scherm is. Daar voegen we nu aan toe of de sneeuwvlok de boom of de tekst raakt. - Dat doen we op een heel slimme manier: we vragen met de functie
get()
aan P5.js wat de kleur is áchter de sneeuwvlok. Als dat géén zwart is, dan zal de sneeuwvlok wel iets geraakt hebben! - Voeg de volgende code toe ná het if-statement in
sneeuwruimen()
waarin we vragen :let c = kerstwens.get(this.posX, this.posY); if (brightness(c) != 0) { return true; }
- Als we in
draw()
zien dat de sneeuwvlok gevallen is, dan voegen we hem toe aan het plaatje dat we net gemaakt hebben:paksneeuw.noStroke(); paksneeuw.fill(255); paksneeuw.circle(sneeuwvlokken[s].posX, sneeuwvlokken[s].posY, sneeuwvlokken[s].grootte);
- Dat doen we één regel boven de regel met
splice()
, want als we het object eenmaal verwijderd hebben dan weten we niet meer waar die vlok getekend moet worden. - Die hele for-loop ziet er dus nu zo uit:
for (var s in sneeuwvlokken) { sneeuwvlokken[s].verplaats(); sneeuwvlokken[s].teken(); let gevallen = sneeuwvlokken[s].sneeuwruimen(); if (gevallen == true) { // voeg het gevallen vlokje toe aan het plaatje paksneeuw.noStroke(); paksneeuw.fill(255); paksneeuw.circle(sneeuwvlokken[s].posX, sneeuwvlokken[s].posY, sneeuwvlokken[s].grootte); // verwijder vlokje uit de lijst sneeuwvlokken.splice(s, 1); } }
- Probeer het maar! Als het goed is blijft de sneeuw nu liggen, omdat we de gevallen sneeuwvlokken steeds toevoegen aan het plaatje, en dat plaatje laten we
Gefeliciteerd! Je hebt een eigen kerstkaart-animatie gemaakt! 🎄✨
Hier zijn een paar optionele stappen die je kunt volgen om je kerstanimatie nog specialer te maken, en hem te delen met je familie en vrienden om de kerstvreugde te verspreiden! 🎁
Als je een account aanmaakt op p5js.org dan kun je je schets opslaan en hem aan anderen laten zien.
- Klik rechtsbovenaan in het scherm van je animatie op 'sign up' om een account aan te maken.
- Als dat gelukt is, sla dan je animatie op. Je kerstkaart krijgt dan een eigen weblink en die kun je naar familie en vrienden sturen!
- Eventueel kun je je hele project ook kopiëren naar Openprocessing.org. Daar opent je kerstkaart zich beeldvullend en ook daar krijg je een weblink als je een account aanmaakt.
- Voeg een extra kerstwens toe ('Groeten van ..').
Wil je een vrolijk belgeluid horen als een sneeuwvlok op de grond valt? Hier is hoe je dat doet!
(Je hebt hiervoor een account nodig op p5js.org. Klik rechtsbovenaan je script op 'sign up' als je niet al ingelogd bent. Sla anders deze stap over.)
-
Download een belgeluid:
- Vind online een belgeluidje (zoek bijvoorbeeld op bigsoundbank.com met het woord 'bel'). Het werkt het best als het een heel kort geluidje is.
- Download het in MP3- of WAV-formaat.
- Sla het geluidsbestand op op je computer (bijvoorbeeld als
bel.wav
).
-
Voeg het geluid toe aan je project:
- Klik in je P5.js-editor op het pijltje onder de afspeelknop, dus naast 'sketch.js'. Je ziet nu de bestanden van je animatie. Klik op de + bovenaan het lijstje en kies voor 'upload file'. Sleep je geluidsbestand naar het venster dat nu opent (of klik erop om een venster te openen waarmee je je bestand kunt zoeken).
-
Laad en speel het geluid in je code:
-
Maak een variabele klaar om je geluid in op te slaan, helemaal bovenaan je script:
let geluid;
-
In de preload-functie zet je het geluid alvast klaar zodat het later afgespeeld kan worden. (
preload()
heb je waarschijnlijk al gedaan voor het lettertypes.)function preload() { geluid = loadSound('bel.wav'); }
-
Speel het geluid af als een sneeuwvlok ergens op valt door
geluid.play()
toe te voegen aan het if-statement indraw()
dat checkt of een sneeuwvlok is gevallen:geluid.play();
-
-
Test je animatie:
- Run je code en luister naar het belletje elke keer dat een sneeuwvlok onderaan neervalt. 🎵
-
Iets minder vaak graag 🙄
- Ok dat zijn wel heel veel belletjes. Als je het belletje minder vaak wil horen, gebruik dan een if-statement met de
random()
-functie om bijvoorbeeld een kans van 1 op 200 te hebben dat het geluid te horen is:// laat soms een geluidje horen if (random(200) < 1) { geluid.play(); }
- Ok dat zijn wel heel veel belletjes. Als je het belletje minder vaak wil horen, gebruik dan een if-statement met de
- Als je het leuk vindt om te weten hoeveel sneeuwvlokken er steeds in beeld zijn, kun je als tekst laten zien hoeveel objecten er in de lijst met sneeuwvlokken staan. Zet deze code onderaan in
draw()
:textFont('Arial', 13); text(sneeuwvlokken.length + " sneeuwvlokken ", width - 5, 5);
- Met een extra variabele kun je ook nog laten zien hoeveel sneeuwvlokken er in totaal zijn gevallen.
- Laat een tekstje 'klik op mij' zien op de kerstboom zolang er nog niet geklikt is voor de kerstballen. Dit kun je doen met een extra variabele en een if-statement.
- Laat de sneeuw ook pas vallen als er geklikt is.
- Maak speciale kerstballen met verschillende vormen.
- Geef sommige sneeuwvlokken de eigenschap (dus met een extra variabele in het object) dat ze niet neerslaan op de boom of de tekst. Je kunt met een if-statement zorgen dat die vlokken voor de boom en de tekst langs zweven.
- Laat de hele tijd een kerstig achtergrondmuziekje spelen.
- Als je nog meer mooie dingen wil maken met P5.js dan kan dat natuurlijk! Zie onze andere instructie voor P5.js.
Als je een voorbeeld wil zien dan kun je mijn kerstkaart bekijken.
Deze instructies worden, net als alle andere instructies van CoderDojo Nijmegen, aangeboden onder een Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Licentie.