Ga naar hoofdinhoud

2.1 Links en rechts bewegen

Tijd voor beweging. Met start_physics() kun je een vorm laten bewegen.

Bekijk de code hieronder. Wat denk je dat er gebeurt?

Spel laden...
Klik hier voor het antwoord.

De bal beweegt naar rechts en stuitert tegen de muur.

info

coderius-play maakt automatisch onzichtbare muren aan de randen van het scherm. Vormen stuiteren hier standaard tegenaan.

Wat gebeurt hier?

import play

cirkel = play.new_circle()
cirkel.start_physics(obeys_gravity=False, x_speed=60)
  1. Regel 3:

    Een gewone cirkel, zoals in hoofdstuk 1. Zonder de regel eronder blijft hij stilstaan.

  2. Regel 4:

    Zet de fysica aan. Twee dingen stel je hier in:

    • obeys_gravity=False: de zwaartekracht staat uit, dus de bal valt niet naar beneden
    • x_speed=60: de bal beweegt met snelheid 60 naar rechts

Onderzoek​

Probeer eens de volgende aanpassingen en kijk wat er verandert:

  • Wat gebeurt er als je x_speed op 0 zet?
  • Wat als je obeys_gravity=False weghaalt (of op True zet)?
Klik hier voor het antwoord.
  • Met x_speed=0 staat de bal stil (er is geen horizontale snelheid).
  • Met obeys_gravity=True valt de bal naar beneden door de zwaartekracht.

Opdracht 2.1.a: De andere kant op​

a) Laat de bal met snelheid 100 naar links bewegen.

Klik hier voor een tip.

Positief is naar rechts, negatief is naar links.

Klik hier voor de oplossing.
import play

cirkel = play.new_circle()
cirkel.start_physics(obeys_gravity=False, x_speed=-100)
Spel laden...

b) Laat de bal schuin naar de rechterboven hoek bewegen.

Klik hier voor een tip.

Naast x_speed bestaat er ook y_speed.

Klik hier voor de oplossing.
import play

cirkel = play.new_circle()
cirkel.start_physics(obeys_gravity=False, x_speed=100, y_speed=100)
Spel laden...

Een tekst in de weg​

De bal hieronder rijdt naar rechts, en in het midden van het scherm staat een tekst. Wat denk je dat de bal doet als hij bij de tekst komt?

import play

bal = play.new_circle(x=-300, radius=20)
bal.start_physics(obeys_gravity=False, x_speed=60)

tekst = play.new_text("Hallo", font_size=60)
Spel laden...
Klik hier voor het antwoord.

De bal stuitert terug tegen de tekst, alsof het een muur is. In coderius-play is elke vorm massief: een vierkant, een cirkel en ook een tekst. Dat geldt al voordat je start_physics() aanroept, en ook voor een vorm die je onzichtbaar maakt met transparency=0.

Wil je dat de bal er doorheen gaat, maak de tekst dan een sensor:

tekst.start_physics(can_move=False, sensor=True)

Een sensor merkt nog wel dat de bal hem raakt, maar houdt hem niet tegen. Hoe dat werkt, staat in 2.3 Fysica-eigenschappen.

Waar kom je dit later weer tegen?
  • In 5.1 Wachten in je spel gebruik je opnieuw x_speed om een bal te laten bewegen — en zie je waarom time.sleep() daar problemen veroorzaakt.
  • In Pong (eindproject) gebruik je x_speed én y_speed om de bal diagonaal te laten stuiteren.