Ga naar hoofdinhoud

2.2 Soorten fysica

Hier bouw je op verder: Jouw naam op het scherm

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Niet elke vorm gedraagt zich hetzelfde. Een bal die rondstuitert is anders dan een platform dat stilstaat.

Met physics_info() kun je opvragen welk type fysica een vorm heeft.

import play

cirkel = play.new_circle()
cirkel.start_physics()

cirkel.physics_info()
Spel laden...

Je ziet nu in je console informatie over het type fysica. Het type wordt bepaald door drie attributen:

AttribuutWat doet het?
can_moveTrue = de vorm mag bewegen, False = de vorm staat altijd stil
obeys_gravityTrue = de zwaartekracht trekt de vorm naar beneden, False = geen zwaartekracht
stableTrue = de vorm beweegt niet als iets ertegen botst, False = de vorm wordt weggeduwd bij een botsing

Door deze drie attributen te combineren, krijg je drie soorten fysica:

Dynamic​

Een dynamic vorm beweegt vrij rond. De zwaartekracht en botsingen hebben er invloed op. Dit is de standaard.

import play

bal = play.new_circle()
bal.start_physics(can_move=True, obeys_gravity=True, stable=False)

bal.physics_info()
  1. Regel 4:

    Drie instellingen samen maken deze bal dynamic:

    • can_move=True: de bal mag bewegen
    • obeys_gravity=True: de bal valt naar beneden
    • stable=False: als iets tegen de bal botst, wordt de bal weggeduwd
  2. Regel 6:

    Print het gevonden type in je console, zodat je kunt controleren of het klopt.

Spel laden...

De bal valt naar beneden en stuitert. Dat is dynamic gedrag.

Static​

Een static vorm staat helemaal stil en kan niet bewegen. Andere vormen kunnen er wel tegenaan botsen.

import play

muur = play.new_box(y=-200, width=400, height=20)
muur.start_physics(can_move=False, obeys_gravity=True, stable=True)

muur.physics_info()
  1. Regel 3:

    Een brede, platte doos onderin het scherm.

  2. Regel 4:

    Deze combinatie maakt hem static:

    • can_move=False: de muur kan niet bewegen
    • obeys_gravity=True: maakt niet uit, want de muur kan toch niet bewegen
    • stable=True: de muur wordt niet weggeduwd bij een botsing
Spel laden...

De muur blijft op zijn plek, wat er ook tegenaan botst.

Kinematic​

Een kinematic vorm beweegt volgens een vaste snelheid. De zwaartekracht heeft er geen invloed op, maar andere vormen botsen er wel tegenaan.

import play

platform = play.new_box(width=200, height=20)
platform.start_physics(can_move=True, obeys_gravity=False, stable=True, x_speed=40)

platform.physics_info()
  1. Regel 4:

    Deze combinatie, mét een eigen x_speed, maakt hem kinematic:

    • can_move=True: het platform mag bewegen
    • obeys_gravity=False: het platform valt niet naar beneden
    • stable=True: het platform wordt niet weggeduwd bij een botsing
Spel laden...

Het platform beweegt heen en weer, maar valt niet naar beneden.

Overzicht​

Typecan_moveobeys_gravitystableVoorbeeld
dynamicTrueTrueFalseEen bal die rondstuitert
staticFalse--TrueEen muur die stilstaat
kinematicTrueFalseTrueEen batje dat je bestuurt

Opdracht 2.2.a: Welk type gebruik je?​

Stel je maakt een pong-spel. Welk type fysica (dynamic, static of kinematic) zou je gebruiken voor elk van deze onderdelen? Bedenk je antwoord eerst zelf.

OnderdeelType fysica?
De bal die rondstuitert???
Het batje dat je met de muis bestuurt???
De muren aan de boven- en onderkant???
Klik hier voor de oplossing.
OnderdeelType fysicaWaarom?
De baldynamicDe bal beweegt vrij rond en reageert op botsingen.
Het batjekinematicHet batje beweegt, maar wordt bestuurd door de speler, niet door de zwaartekracht.
De murenstaticDe muren staan stil en kunnen niet bewegen, maar andere vormen botsen er wel tegenaan.

Opdracht 2.2.b: Herken het type​

Maak de volgende drie vormen en voorspel voor elk welk type fysica het is. Controleer je antwoord met physics_info().

import play

vorm_a = play.new_circle()
vorm_a.start_physics(can_move=True, obeys_gravity=True, stable=False)

vorm_b = play.new_box(y=-200, width=400, height=20)
vorm_b.start_physics(can_move=False, obeys_gravity=True, stable=True)

vorm_c = play.new_circle(y=200, color='red')
vorm_c.start_physics(can_move=True, obeys_gravity=False, stable=True, x_speed=50)

# print hier de physics_info() van elke vorm
Spel laden...
Klik hier voor de oplossing.
import play

vorm_a = play.new_circle()
vorm_a.start_physics(can_move=True, obeys_gravity=True, stable=False)
print("vorm_a:")
vorm_a.physics_info()

vorm_b = play.new_box(y=-200, width=400, height=20)
vorm_b.start_physics(can_move=False, obeys_gravity=True, stable=True)
print("vorm_b:")
vorm_b.physics_info()

vorm_c = play.new_circle(y=200, color='red')
vorm_c.start_physics(can_move=True, obeys_gravity=False, stable=True, x_speed=50)
print("vorm_c:")
vorm_c.physics_info()
Spel laden...
  • vorm_a is dynamic (kan bewegen, zwaartekracht aan, niet stabiel)
  • vorm_b is static (kan niet bewegen, stabiel)
  • vorm_c is kinematic (kan bewegen, geen zwaartekracht, stabiel)
Waar kom je dit later weer tegen?

Bij Pong (eindproject) pas je deze drie types direct toe: de bal is dynamic, de batjes zijn kinematic, en de muren zijn static. Opdracht 2.2.a hierboven is feitelijk al de voorbereiding op die keuze.