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.xgeeft de x-positie van de muisplay.mouse.ygeeft 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:
- Een cirkel de muis volgt
- 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:
- Een rechthoek (het batje) alleen verticaal beweegt met de muis (de x blijft vast)
- 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