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
aufTrue
gesetzt.Wenn die Maustaste losgelassen wird, wird der Actor nur verschoben, wenn
dragged
aufTrue
gesetzt ist. Danach wirddragged
wieder aufFalse
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()