Drag and Drop

Inhalt

Drag and Drop#

Um einen Actor zu verschieben, musst du die Events on_mouse_left und on_mouse_left_released registrieren. Außerdem benötigst du eine Variable (z. B. dragged), um zu speichern, ob ein Objekt gerade gezogen wird.

  • Wenn die Maus geklickt wird, wird die Variable dragged auf True gesetzt.

  • Wenn die Maustaste losgelassen wird, wird der Actor nur verschoben, wenn dragged auf True gesetzt ist. Danach wird dragged wieder auf False gesetzt.

Beispiele:#

Kreise verschieben:

import miniworlds

world = miniworlds.World(200, 200)
circle = miniworlds.Circle((30, 30), 60)
circle.direction = 90
circle.dragged = False

@circle.register
def on_mouse_left(self, mouse_pos):
    if self.detect_point(mouse_pos):
        self.dragged = True

@circle.register
def on_mouse_left_released(self, mouse_pos):
    if self.dragged:
        self.dragged = False
        self.center = mouse_pos

world.run()

Drag and Drop in einer TiledWorld:

import miniworlds 
world = miniworlds.TiledWorld()
t1 = miniworlds.Actor((0, 0))
t2 = miniworlds.Actor((3, 4))
t2.dragged = False

@t2.register
def on_mouse_left(self, mouse_pos):
    if self.detecting_point(mouse_pos):
        self.dragged = True
        print("start drag")

@t2.register
def on_mouse_left_released(self, mouse_pos):
    tile = mouse_pos
    if self.dragged:
        self.position = tile
    self.dragged = False

world.run()