Ga naar hoofdinhoud

4.3 De muis gebruiken

Naast het toetsenbord kun je ook de muis gebruiken in je spel. Met play.mouse kun je de positie van de muis opvragen en een vorm de muis laten volgen.

Muispositie opvragen

import play

tekst = play.new_text(words="Beweeg je muis!")

@play.repeat_forever
def update():
tekst.words = "x=" + str(play.mouse.x) + " y=" + str(play.mouse.y)
  • play.mouse.x geeft de x-positie van de muis
  • play.mouse.y geeft de y-positie van de muis

Een vorm de muis laten volgen

import play

cirkel = play.new_circle(radius=20, color='blue')

@play.repeat_forever
def volg_muis():
cirkel.x = play.mouse.x
cirkel.y = play.mouse.y

De cirkel volgt nu je muis!

Reageren op een muisklik

Met @play.when_mouse_clicked kun je iets laten gebeuren zodra de speler op de muis klikt:

import play

cirkel = play.new_circle(color='blue')

@play.when_mouse_clicked
def muis_geklikt():
cirkel.color = 'red'

Als je op de muis klikt, wordt de cirkel rood.

Zolang de muis ingedrukt is

Met @play.while_mouse_pressed kun je iets laten gebeuren elk frame zolang de muisknop ingedrukt is:

import play

cirkel = play.new_circle(color='blue', radius=20)

@play.while_mouse_pressed
def teken():
cirkel.x = play.mouse.x
cirkel.y = play.mouse.y

Het verschil met @play.when_mouse_clicked? Die vuurt maar één keer bij het klikken. @play.while_mouse_pressed vuurt elk frame zolang je de muisknop inhoudt.

Opdracht 4.3.a: Muisvolger

Maak een programma waarbij:

  1. Een cirkel de muis volgt
  2. Een tekst bovenaan het scherm de muispositie toont
Klik hier voor de oplossing!
import play

cirkel = play.new_circle(radius=20, color='blue')
tekst = play.new_text(words="", y=250)

@play.repeat_forever
def update():
cirkel.x = play.mouse.x
cirkel.y = play.mouse.y
tekst.words = "x=" + str(play.mouse.x) + " y=" + str(play.mouse.y)

Opdracht 4.3.b: Batje besturen met de muis

Maak een programma waarbij:

  1. Een rechthoek (het batje) alleen verticaal beweegt met de muis (de x blijft vast)
  2. Een bal heen en weer beweegt en tegen het batje botst
Klik hier voor een tip!

Zet alleen de y van het batje gelijk aan play.mouse.y. De x van het batje blijft hetzelfde.

Klik hier voor de oplossing!
import play

batje = play.new_box(x=300, width=15, height=80)

bal = play.new_circle(radius=15, color='red')
bal.start_physics(obeys_gravity=False, x_speed=200)

@play.repeat_forever
def update():
batje.y = play.mouse.y