Actor#
Actors can communicate through messages when this is easier to read than passing object references around.
Combine send_message(...) with @register_message("...") for simple,
beginner-friendly event flows between actor classes.
API Reference#
- class miniworlds.actors.actor.Actor(position=(0, 0), *args, **kwargs)[Quellcode]#
Interactive object placed in a world.
Actors can move, detect collisions, send messages, and react to input and lifecycle events.
Beispiele
- Create a basic actor:
from miniworlds import World, Actor world = World(100, 60) Actor((10, 10), world=world) world.run()
- Create an actor with a costume:
from miniworlds import World, Actor world = World(100, 60) player = Actor((10, 10), world=world) player.add_costume(„images/player.png“) world.run()
Siehe auch
Actor API page
Shapes API page
Text actor API page
Öffentliche Datenattribute:
Aktueller Ursprungmodus für Größen- und Positionsoperationen.
collision_type gibt an, wie Kollisionen überprüft werden sollen:
A actor with the property
is_blockablecannot move through actors with the propertyis_blocking.A actor with the property
is_blockablecannot move through actors with the propertyis_blocking.Defines the layer on which the actor is drawn if several actors overlap.
Actor-Position im letzten Frame
Richtungswert aus dem vorherigen Frame.
Returns number of costumes of actor, 0 if actor has no costume
Ob das Actor-Kostüm an der horizontalen Achse gespiegelt ist.
Gets the costume of the actor, if available.
Ruft den Kostümmanager ab
Ausrichtungsversatz des Kostüms in Grad.
Directions are handled exactly as in the Scratch programming language, see: Scratch Wiki
Erhält die Richtung als Wert im Einheitskreis (0° rechts, 90° oben, 180° links…)
Größe des Actors
Die Breite des Actors in Pixeln.
Die Höhe des Actors in Pixeln.
Der x-Wert eines Actors
Der y-Wert eines Actors
Klassenname dieser Actor-Instanz.
x-Wert der oberen linken Position des Actors
y-value of actor topleft-position
Oben-links-Position des Actors in Weltkoordinaten.
x-Wert der Actor-Mittelposition innerhalb des aktuellen Kamerabildschirms
x-Wert der Actor-Mittelposition
y-Wert der Actor-Mittelposition
Mittelpunktposition des Actors in Weltkoordinaten.
Legt fest, ob das Kostüm eines Actors drehbar sein soll.
Should actor react to events? You can turn this option off for additional performance boost.
Fill color of the actor as RGBA tuple.
Fill color of the actor as RGBA tuple.
Ist der Actor mit Farbe gefüllt?
Border color as RGBA tuple.
Border color as RGBA tuple.
Border width of the actor.
Ob der Actor aktuell sichtbar ist.
Welt, zu der dieser Actor gehört.
Das Bild des Actors:
Die Position des Actors als Position(x, y)
Inherited from
ActorBasedirtyWenn der Actor dirty ist, wird er neu gezeichnet.
rectDas umgebende Rechteck als pygame.Rect.
position_managersensor_managercostume_managerInherited from
DirtySpritevisibleYou can make this sprite disappear without removing it from the group assign 0 for invisible and 1 for visible
layerDie Ebeneneigenschaft kann nur festgelegt werden, bevor der Sprite zu einer Gruppe hinzugefügt wird. Danach ist sie schreibgeschützt und die Ebene eines Sprites in einer Gruppe sollte über die change_layer()-Methode der Gruppe festgelegt werden.
Inherited from
SpriteimagerectlayerDynamic, read only property for protected _layer attribute.
Öffentliche Methoden:
__init__([position])switch_origin(value)Wechselt den Ursprung des Actors und erhält dabei die sichtbare Position auf dem Bildschirm.
create_on_world(world)Creates a actor to a specific world
from_topleft(topleft_position, *args, **kwargs)Erstellt einen Actor, dessen Ursprung als oben links interpretiert wird.
from_center(center_position, *args, **kwargs)Erstellt einen Actor, dessen Ursprung als Mittelpunkt interpretiert wird.
flip_x()Dreht den Actor um 180° Grad.
add_costume([source])Adds a new costume to actor.
add_costumes(sources)Adds multiple costumes
remove_costume([source])Removes a costume from actor
switch_costume(source)Switches the costume of actor
set_costume(costume)Setzt das aktuelle Kostüm über einen Index, eine Quelle oder ein Appearance-Objekt.
Entfernt alle Kostüme und setzt den Appearance-Zustand zurück.
set_background_color(color)Setzt eine Hintergrundfarbe hinter das Kostümbild des Actors.
Switches to the next costume of actor
Gibt
Truezurück, wenn der Actor aktuell ein Kostüm hat.turn_left([degrees])Turns actor by degrees degrees left :rtype:
intturn_right([degrees])Turns actor by degrees degrees right
set_direction(direction)Actor points in given direction.
point_towards_position(destination)Actor points towards a given position
point_towards_actor(other)Actor points towards another actor.
set_size(value)Setzt die Actor-Größe als
(width, height)in Pixeln.scale_width(value)Skaliert die Actor-Breite mit einem Faktor.
scale_height(value)Skaliert die Actor-Höhe mit einem Faktor.
move([distance, direction])Moves actor distance steps in current direction
move_vector(vector)Moves actor in direction defined by the vector
move_back(distance)Moves the actor backward by distance steps (opposite of current direction).
Mache den letzten Zug rückgängig.
move_towards(target)Bewegt sich einen Schritt in Richtung eines Ziel-Actors oder einer Position.
move_in_direction(direction[, distance])Bewegt den Actor distance Schritte in eine direction oder zu einer Position
move_to(position)Bewegt den Actor distance zu einer bestimmten world_posiition
remove([kill])Entfernt diesen Actor aus der Welt
Hook, der unmittelbar vor dem Entfernen des Actors aus der Welt aufgerufen wird.
bounce_from_border(borders)“prallt” von einem Rand ab.
detect_all([actors, direction, distance])Detects if actors are on actor position.
detect(*args, **kwargs)Detects if actors are on actor position.
detect_borders([distance])Detects borders
Does the actor touch the left border?
Does the actor touch the right border?
Does the actor touch the top border?
Does the actor touch the lower border?
detect_color([color])Detects colors in world-background at actor center-position
detect_color_at([direction, distance])Detects colors in world-background at actor-position
detect_actors_at([direction, distance, actors])Detects a actor in given direction and distance.
detect_actor_at([direction, distance, actors])Erkennt und liefert den ersten Actor in einer gegebenen Richtung und Distanz.
detect_actors_in_front([actors, distance])Erkennt alle Actors direkt vor diesem Actor.
detect_actor_in_front([actors, distance])Erkennt und liefert den ersten Actor direkt vor diesem Actor.
detect_point(position)Is the actor colliding with a specific (global) point?
detect_pixel(position)Is the actor colliding with a pixel?
detect_rect(rect)Is the actor colliding with a static rect?
Checks whether the actor is completely inside the world boundaries.
bounce_from_actor(other)Spiegelt die Bewegungsrichtung bei einer Kollision mit einem anderen Actor.
animate([speed])Animiert das aktuelle Kostüm mit der angegebenen Geschwindigkeit.
animate_costume(costume[, speed])Animiert ein bestimmtes Kostüm mit der angegebenen Geschwindigkeit.
animate_loop([speed])Animates a costume with a looping animation
Stops current animation.
send_message(message)Sends a message to world.
on_key_down(key)Called once when a key is pressed.
on_key_pressed(key)Called repeatedly every frame while a key is held down.
on_key_up(key)Called once when a previously pressed key is released.
on_mouse_over(position)Called when the mouse cursor enters or moves over the actor area.
on_mouse_leave(position)Called when the mouse cursor leaves the actor area.
on_mouse_left_down(position)Wird aufgerufen, wenn die linke Maustaste gedrückt wird.
on_mouse_right_down(position)Wird aufgerufen, wenn die rechte Maustaste gedrückt wird.
on_mouse_left(position)Called when the left mouse button is clicked.
on_mouse_right(position)Called when the right mouse button is clicked.
on_mouse_motion(position)Called when the mouse moves.
on_mouse_left_released(position)Method is called when left mouse key is released.
on_mouse_right_released(position)Method is called when right mouse key is released.
on_clicked_left(position)The mouse is on top of a actor and mouse was clicked.
on_clicked_right(position)The mouse is on top of a actor and mouse was clicked.
on_detecting_world is called, when actor is on the world
Called when the actor is not touching the world (i.e. outside world bounds).
on_detecting_actor(actor)on_detecting_actor is called, when actor is detects a actor on same position
on_detecting_borders(borders)on_detecting_border wird aufgerufen, wenn sich der Actor in der Nähe einer Grenze befindet
fill(value)Füllfarbe für Ränder und Linien festlegen
hide()Verbirgt einen Actor (der Actor wird unsichtbar)
show()Zeigt einen Actor an (ein unsichtbarer Actor wird sichtbar)
register_sensor(*args, **kwargs)This method is used for the @register_sensor decorator.
Gibt das Actor-Rechteck in kamera-lokalen Koordinaten zurück.
set_world(new_world)Verschiebt den Actor in eine andere Welt und gibt den Actor zurück.
Erstellt ein neues leeres Kostüm und hängt es an diesen Actor an.
set_position(value)Setzt die Actor-Position in Weltkoordinaten.
get_distance_to(obj)Gets the distance to another actor or a position
Hook, der aufgerufen wird, wenn sich formbezogene Actor-Eigenschaften ändern.
Inherited from
ActorBaseregister(method[, force, name])This method is used for the @register decorator.
register_message(*args, **kwargs)Registriert eine Methode bei einem Objekt, um bestimmte
on_message-Ereignisse zu bearbeiten.__str__()Gib str(self) zurück.
get_costume_class()Inherited from
DirtySprite__init__(*groups)__repr__()Return repr(self).
Inherited from
Sprite__init__(*groups)add(*groups)add the sprite to groups
remove(*groups)remove the sprite from groups
add_internal(group)For adding this sprite to a group internally.
remove_internal(group)For removing this sprite from a group internally.
update(*args, **kwargs)method to control sprite behavior
kill()remove the Sprite from all Groups
groups()list of Groups that contain this Sprite
alive()does the sprite belong to any groups
__repr__()Return repr(self).
Private Data Attributes:
_abc_impl__image__rectInherited from
ActorBase_abc_implPrivate Methoden:
_get_initialization_facade()_get_appearance_facade()_get_event_facade()_get_sensor_facade()_get_movement_facade()_get_size_facade()_validate_arguments(position, *args, **kwargs)Inherited from
ActorBase_is_actor_repainted()Inherited from
DirtySprite_set_visible(val)den sichtbaren Wert (0 oder 1) festlegen und den Sprite als verändert markieren
_get_visible()return the visible value of that sprite
- add_costume(source=None)[Quellcode]#
Fügt dem Actor ein neues Kostüm hinzu. Das Kostüm kann mit self.switch_costume(index) gewechselt werden
- Rückgabetyp:
- Parameter:
source – Pfad zum ersten Bild des neuen Kostüms oder Tupel mit Farbwert
Beispiele
Erstes Kostüm aus dem Bild hinzufügen:
from miniworlds import * world = World(100,60)) actor = Actor((10,10)) costume = actor.add_costume("images/player.png") world.run()
Ausgabe:
Füge das erste Kostüm aus der Farbe hinzu:
from miniworlds import * world = World(100,60)) actor = Actor((10,10)) costume = actor.add_costume((255,255,0)) world.run()
Ausgabe:
Erstelle zwei Kostüme und wechsle zwischen den Kostümen
from miniworlds import * world = World(100,60)) actor = Actor((10,10)) world.speed = 30 costume1 = actor.add_costume((255,255,0)) costume2 = actor.add_costume((255,0,255)) @actor.register def act(self): if self.costume == costume1: self.switch_costume(costume2) else: self.switch_costume(costume1) world.run()
Ausgabe:
- Rückgabe:
Das neue Kostüm.
- add_costumes(sources)[Quellcode]#
Adds multiple costumes
- Rückgabetyp:
- animate(speed=10)[Quellcode]#
Animiert das aktuelle Kostüm mit der angegebenen Geschwindigkeit.
- animate_costume(costume, speed=10)[Quellcode]#
Animiert ein bestimmtes Kostüm mit der angegebenen Geschwindigkeit.
- animate_loop(speed=10)[Quellcode]#
Animates a costume with a looping animation
Wechselt alle Kostümbilder bei jedem „Geschwindigkeit“-Frame durch.
Beispiele
from miniworlds import * world = World(columns=280, rows=100) robo = Actor(position=(0, 0)) robo.costume.add_images(["images/1.png", "images/2.png","images/3.png","images/4.png"]) robo.size = (99, 99) robo.animate_loop() world.run()
- Parameter:
speed (int, optional) – Jedes
speed-Frame wird das Bild gewechselt. Standardmäßig auf 10.
- before_remove()[Quellcode]#
Hook, der unmittelbar vor dem Entfernen des Actors aus der Welt aufgerufen wird.
- property border#
Border width of the actor.
A value of 0 means no border.
Notes
You can also configure borders via costume.border or world.default_border.
- property border_color#
Border color as RGBA tuple.
Notes
Set Actor.border to a value greater than 0 for a visible border.
Alias: Actor.stroke_color.
- bounce_from_actor(other)[Quellcode]#
Spiegelt die Bewegungsrichtung bei einer Kollision mit einem anderen Actor.
- bounce_from_border(borders)[Quellcode]#
“prallt” von einem Rand ab.
The direction is set according to the principle input angle = output angle. :rtype:
ActorBemerkung
Sie müssen zuerst die Grenzen überprüfen!
- Parameter:
borders – Eine Liste von Rändern als Zeichenfolgen, z.B. [“left”, “right”]
Beispiele
from miniworlds import * import random world = World(150, 150) actor = Actor((50,50)) actor.add_costume("images/ball.png") actor.direction = 10 @actor.register def act(self): self.move() borders = self.detecting_borders() if borders: self.bounce_from_border(borders) world.run()
Ausgabe:
- Rückgabe:
Der Actor
- property collision_type: str#
collision_type gibt an, wie Kollisionen überprüft werden sollen:
default: Kachel für TiledWorlds, ‘Maske’ für Pixelweltentile: Befinden sich die Actors auf derselben Kachel? (nur TiledWorld)rect: Kollidieren die Actors beim Überprüfen ihrer Begrenzungsrahmen? (Nur PixelWorld)static-rect: Kollidieren Actors beim Überprüfen eines Kreises mit Radius = Begrenzungsrahmenradius. (Nur PixelWorld)circle: Kollidieren Actors beim Überprüfen des Kreises mit Radius = Begrenzungsrahmenradius. (Nur PixelWorld)mask: Überprüfen die Actors, ob ihre Bildmasken sich überschneiden, wenn sie kollidieren.
- property color#
Fill color of the actor as RGBA tuple.
Setting this value also enables filling on the costume.
Notes
Alias: Actor.color
Filling an image costume replaces the visible image content.
- property costume_count: int#
Returns number of costumes of actor, 0 if actor has no costume
Beispiele
Kostüm hinzufügen und Kostüme zählen
from miniworlds import * world = World() actor = Actor() initial_count = actor.costume_count # 0 actor.add_costume((255,0,0,0)) final_count = actor.costume_count # 1 world.run()
- Rückgabe:
Number of costumes currently attached to the actor.
- Rückgabetyp:
- property costumes: CostumesManager#
Ruft den Kostümmanager ab
Der Kostümmanager kann iteriert werden, um alle Kostüme zu erhalten
- classmethod create_on_world(world)[Quellcode]#
Creates a actor to a specific world
in Unterklassen überschrieben
- detect(*args, **kwargs)[Quellcode]#
Erkennt, ob sich Actors an der Position eines Actors befinden. Gibt den zuerst gefundenen Actor zurück.
- Rückgabetyp:
- Parameter:
actors – nach Actortyp filtern. Geben Sie einen class_name der Actor ein, nach denen gesucht werden soll Richtung: int = 0, Entfernung: int = 0
direction – Die Richtung, in der Actor erkannt werden sollen.
distance – Die Entfernung, in der Actors erkannt werden sollten (Startpunkt ist actor.center)
- Rückgabe:
Erster Actor vom Sensor gefunden
Beispiele
Der grüne Roboter schiebt den gelben Roboter:
from miniworlds import * world = TiledWorld(8,3) actor = Actor((1,1)) actor.add_costume("images/robo_green.png") actor.orientation = -90 actor.direction = 90 actor2 = Actor((4,1)) actor2.add_costume("images/robo_yellow.png") actor2.orientation = -90 actor2.direction = -90 @actor.register def act(self): self.move() actor = self.detecting_actor() if actor: actor.move_right() world.run()
Ausgabe:
- detect_actor_at(direction=None, distance=0, actors=None)[Quellcode]#
Erkennt und liefert den ersten Actor in einer gegebenen Richtung und Distanz.
- Rückgabetyp:
- detect_actor_in_front(actors=None, distance=1)[Quellcode]#
Erkennt und liefert den ersten Actor direkt vor diesem Actor.
- Rückgabetyp:
- detect_actors_at(direction=None, distance=0, actors=None)[Quellcode]#
Detects a actor in given direction and distance.
Beispiele
from miniworlds import * world = World() wall=Rectangle((200,0)) wall.size = (20, 400) for i in range(7): actor = Circle((10,i*60 + 20)) actor.range = i * 10 @actor.register def act(self): if not self.detect_actors_at(self.direction, self.range): self.direction = "right" self.move() world.run()
- Parameter:
direction – Die Richtung, in der Actor erkannt werden sollen.
distance – Die Entfernung, in der Actors erkannt werden sollten (Startpunkt ist actor.center)
- Rückgabetyp:
- Rückgabe:
Eine Liste von Actorn
- detect_actors_in_front(actors=None, distance=1)[Quellcode]#
Erkennt alle Actors direkt vor diesem Actor.
- Rückgabetyp:
- detect_all(actors=None, direction=0, distance=0)[Quellcode]#
Erkennt, ob sich Actors an der Position eines Actors befinden. Gibt eine Liste von Actorsn zurück.
- Rückgabetyp:
- Parameter:
actors – nach Actortyp filtern. Geben Sie hier einen class_name der gesuchten Actor ein
direction – Die Richtung, in der Actor erkannt werden sollen.
distance – Die Entfernung, in der Actors erkannt werden sollten (Startpunkt ist actor.center)
- Rückgabe:
Alle von Sensor gefundenen Actors
- detect_borders(distance=0)[Quellcode]#
Detects borders
Args: :rtype:
Listdistance: Specifies the distance in front of the actuator to which the sensors reacts.
- Rückgabe:
Wahr, wenn eine Grenze gefunden wurde.
- detect_color(color=None)[Quellcode]#
Detects colors in world-background at actor center-position
- Rückgabetyp:
- Parameter:
color – Farbe als Tupel
- Rückgabe:
Wahr, wenn die Farbe gefunden wurde
- detect_color_at(direction=None, distance=0)[Quellcode]#
Detects colors in world-background at actor-position
- detect_left_border()[Quellcode]#
Does the actor touch the left border?
- Rückgabetyp:
- Rückgabe:
Wahr, wenn eine Grenze gefunden wurde.
- detect_pixel(position)[Quellcode]#
Is the actor colliding with a pixel?
- Rückgabetyp:
- Rückgabe:
Wahr, wenn der Pixel unter dem Actor ist
- detect_point(position)[Quellcode]#
Is the actor colliding with a specific (global) point?
- Rückgabetyp:
Warnung
Wenn Sie überprüfen möchten, ob ein Actor einen bestimmten Pixel erkennt, verwenden Sie detect_pixel
- Rückgabe:
Wahr, wenn der Punkt unter dem Actor liegt
- detect_rect(rect)[Quellcode]#
Is the actor colliding with a static rect?
- detect_right_border()[Quellcode]#
Does the actor touch the right border?
- Rückgabetyp:
- Rückgabe:
Wahr, wenn eine Grenze gefunden wurde.
- detect_top_border()[Quellcode]#
Does the actor touch the top border?
- Rückgabetyp:
- Rückgabe:
Wahr, wenn eine Grenze gefunden wurde.
- detecting_bottom_border()[Quellcode]#
Does the actor touch the lower border?
- Rückgabetyp:
- Rückgabe:
Wahr, wenn eine Grenze gefunden wurde.
- property direction: int#
Directions are handled exactly as in the Scratch programming language, see: Scratch Wiki
Die Standardrichtung ist
0°. Alle Actors schauen"nach oben"
Werte für Richtung
0°oder"up": oben90°oder"rechts": Nach rechts bewegen-90°oder"left": Nach links bewegen180°oder"down": Nach unten bewegen"forward": Aktuelle Richtung
Legt die Richtung des Actors fest.
Sie können eine ganze Zahl oder einen String verwenden, um die Richtung zu beschreiben
- Optionen
0,"up"- Nachschlagen90,"right", - Schau nach rechts-90,"left", - Schau nach links-180,180,"down"- Schau nach unten
Beispiele
Bewege dich mit den WASD-Tasten in eine Richtung
def on_key_down(self, keys): if "W" in keys: self.direction = "up" elif "S" in keys: self.direction = "down" elif "A" in keys: self.direction = "left" elif "D" in keys: self.direction = "right" self.move()
Bewege 45°:
from miniworlds import * world = World(100, 100) c = Circle ((50,50), 10) @c.register def act(self): c.direction = 45 c.move() world.run()
Bewege -45°:
from miniworlds import * world = World(100, 100) c = Circle ((50,50), 10) @c.register def act(self): c.direction = -45 c.move() world.run()
- property direction_at_unit_circle: int#
Erhält die Richtung als Wert im Einheitskreis (0° rechts, 90° oben, 180° links…)
- fill(value)[Quellcode]#
Füllfarbe für Ränder und Linien festlegen
- property fill_color#
Fill color of the actor as RGBA tuple.
Setting this value also enables filling on the costume.
Notes
Alias: Actor.color
Filling an image costume replaces the visible image content.
- flip_x()[Quellcode]#
Flips the actor by 180° degrees. The costume is flipped and the actor’s direction changed by 180 degrees. :rtype:
int
Beispiele
Drehe einen Actor in Beispiel flipthefish.py
from miniworlds import * world=TiledWorld() world.columns = 4 world.rows = 1 world.add_background("images/water.png") fish = Actor() fish.border = 1 fish.add_costume("images/fish.png") fish.direction = "right" fish.orientation = -90 @fish.register def act(self): self.move() @fish.register def on_not_detecting_world(self): self.move_back() self.flip_x() world.run()
Ausgabe:
- classmethod from_center(center_position, *args, **kwargs)[Quellcode]#
Erstellt einen Actor, dessen Ursprung als Mittelpunkt interpretiert wird.
- classmethod from_topleft(topleft_position, *args, **kwargs)[Quellcode]#
Erstellt einen Actor, dessen Ursprung als oben links interpretiert wird.
- get_distance_to(obj)[Quellcode]#
Gets the distance to another actor or a position
- get_local_rect()[Quellcode]#
Gibt das Actor-Rechteck in kamera-lokalen Koordinaten zurück.
- Rückgabetyp:
Rect
- has_costume()[Quellcode]#
Gibt
Truezurück, wenn der Actor aktuell ein Kostüm hat.- Rückgabetyp:
- property height#
Die Höhe des Actors in Pixeln.
Wenn die Höhe eines Actors geändert wird, wird die Breite proportional skaliert.
Beispiele
Erstellen Sie einen Actor und skalieren Sie die Breite/Höhe proportional:
from miniworlds import * world = World(800,400) def create_actor(x, y): t = Actor() t.position = (x, y) t.add_costume("images/alien1.png") t.border = 1 return t t0 = create_actor(0,0) t1 = create_actor(50,0) t1.height = 400 t2 = create_actor(300,0) t2.width = 180 world.run()
- hide()[Quellcode]#
Verbirgt einen Actor (der Actor wird unsichtbar)
- property image: Surface#
Das Bild des Actors:
Warnung
Warnung: Sie sollten nicht direkt auf das Bild zeichnen (mit pygame-Funktionen), da das Bild während der Animationen neu geladen wird
- property is_blockable#
A actor with the property
is_blockablecannot move through actors with the propertyis_blocking.
- property is_blocking#
A actor with the property
is_blockablecannot move through actors with the propertyis_blocking.
- property is_filled#
Ist der Actor mit Farbe gefüllt?
- is_inside_world()[Quellcode]#
Checks whether the actor is completely inside the world boundaries.
- Rückgabe:
True if the entire actor rectangle is within the world, False otherwise.
- property is_rotatable: bool#
Legt fest, ob das Kostüm eines Actors drehbar sein soll. Der Actor kann immer noch mit der Eigenschaft
directiongedreht werden, aber sein Kostüm wird nicht verändertBemerkung
Sie können auch
actor.costume.is_rotatableverwendenBeispiele
Erstellen Sie einen drehbaren und einen nicht drehbaren Actor
from miniworlds import * world = World() t1 = Actor((100,100)) t1.add_costume("images/alien1.png") t2 = Actor((200,200)) t2.add_costume("images/alien1.png") t2.is_rotatable = False @t1.register def act(self): self.move() self.direction += 1 @t2.register def act(self): self.move() self.direction += 1 world.run()
Ausgabe:
- property last_position: Tuple[float, float]#
Actor-Position im letzten Frame
Kann verwendet werden, um Änderungen zu verfolgen.
- property local_center: Tuple[float, float]#
x-Wert der Actor-Mittelposition innerhalb des aktuellen Kamerabildschirms
- move(distance=0, direction=0)[Quellcode]#
Moves actor distance steps in current direction
- Parameter:
distance – Anzahl der Schritte, die bewegt werden sollen. Wenn die Entfernung = 0 ist, wird die Geschwindigkeit des Actors verwendet.
- Rückgabe:
Der bewegte Actor
Beispiele
wenn der Actor in der Welt ist, vorwärts bewegen:
class Robot(Actor): def act(self): if self.detecting_world(): self.move()
- move_back(distance)[Quellcode]#
Moves the actor backward by distance steps (opposite of current direction).
- Parameter:
distance – Number of steps to move backward.
- Rückgabe:
The actor itself.
Beispiele
Move back when wall is detected:
def act(self): self.move() if self.detect(Wall): self.move_back(5)
- move_in_direction(direction, distance=1)[Quellcode]#
Bewegt den Actor distance Schritte in eine direction oder zu einer Position
- Optionen
0, “up” - Nachschlagen
90, “rechts”, - Schau nach rechts
-90, “links”, - Schau nach links
-180, 180, “unten” - Schau nach unten
- Parameter:
direction – Richtung als Winkel
distance – Erkennt Objekte “Entfernung” Schritte vor dem aktuellen Actor.
- Rückgabe:
Der Actor selbst
- move_to(position)[Quellcode]#
Bewegt den Actor distance zu einer bestimmten world_posiition
- Parameter:
position – Die Position, zu der sich der Actor bewegen soll. Die Position kann ein 2-Tupel (x, y) sein
world_position (which will be converted to a)
- Rückgabe:
Der Actor selbst
Beispiele
bewege zu (3, 2) bei Maus-Klick
def on_clicked_left(self, position): self.move_to((3,2))
- move_towards(target)[Quellcode]#
Bewegt sich einen Schritt in Richtung eines Ziel-Actors oder einer Position.
- move_vector(vector)[Quellcode]#
Moves actor in direction defined by the vector
- Rückgabe:
Der bewegte Actor
- new_costume()[Quellcode]#
Erstellt ein neues leeres Kostüm und hängt es an diesen Actor an.
- next_costume()[Quellcode]#
Switches to the next costume of actor
- Rückgabe:
Das neue Kostüm
- on_clicked_left(position)[Quellcode]#
The mouse is on top of a actor and mouse was clicked.
Beispiele
Registrieren eines on_click-Ereignisses:
actor = miniworlds.Actor((2,2)) @actor.register def on_clicked_left(self, position): # Handle click event
- Parameter:
position (tuple) – Aktuelle Mausposition als Tupel (x,y)
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_clicked_right(position)[Quellcode]#
The mouse is on top of a actor and mouse was clicked.
Beispiele
Registrieren eines on_click-Ereignisses:
actor = miniworlds.Actor((2,2)) @actor.register def on_clicked_right(self, position): # Handle right click event
- Parameter:
position (tuple) – Aktuelle Mausposition als Tupel (x,y)
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_detecting_actor(actor)[Quellcode]#
on_detecting_actor is called, when actor is detects a actor on same position
- Parameter:
actor (Actor) – Der gefundene Actor
Beispiele
Registriere detect_actor-Ereignis
@player.register def on_detecting_actor(self, actor): # Check if detected actor is the target if actor == player2: self.move() # React to detection
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_detecting_borders(borders)[Quellcode]#
on_detecting_border wird aufgerufen, wenn sich der Actor in der Nähe einer Grenze befindet
- Parameter:
borders (List) – Eine Liste von Zeichenfolgen mit gefundenen Grenzen, z.B.: [‘left’, ‘top’]
Beispiele
Registrieren Sie on_detecting_border_event:
@player.register def on_detecting_borders(self, borders): # Handle border detection if "left" in borders: self.x = 1 # Move away from left edge
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_detecting_world()[Quellcode]#
on_detecting_world is called, when actor is on the world
Beispiele
Registrieren Sie die Methode on_detecting_world:
@player.register def on_detecting_world(self): # Actor is inside the world
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_key_down(key)[Quellcode]#
Called once when a key is pressed.
Register
on_key_down_<letter>(for exampleon_key_down_a) if you want to react to a specific letter only.For arrow keys use
on_key_down_left,on_key_down_right,on_key_down_up,on_key_down_down.- Parameter:
key – List of key name variants, for example
['A', 'a']or['left']for the left arrow key.
Beispiele
Move with WASD keys:
@player.register def on_key_down(self, key): if 'W' in key or 'up' in key: self.direction = 'up' elif 'S' in key or 'down' in key: self.direction = 'down' elif 'A' in key or 'left' in key: self.direction = 'left' elif 'D' in key or 'right' in key: self.direction = 'right' self.move()
Or use dedicated per-key handlers for arrow keys:
@player.register def on_key_down_left(self): self.direction = 'left' self.move() @player.register def on_key_down_right(self): self.direction = 'right' self.move() @player.register def on_key_down_up(self): self.direction = 'up' self.move() @player.register def on_key_down_down(self): self.direction = 'down' self.move()
- on_key_pressed(key)[Quellcode]#
Called repeatedly every frame while a key is held down.
This is the right choice for smooth, continuous movement. Like
on_key_down, this event supports per-letter handlers such ason_key_pressed_woron_key_pressed_leftfor the left arrow key.- Parameter:
key – List of key name variants currently held, for example
['W', 'w']or['up'].
Beispiele
Smooth movement with arrow keys (fires every frame while held):
@player.register def on_key_pressed(self, key): if 'left' in key: self.x -= 3 elif 'right' in key: self.x += 3 elif 'up' in key: self.y -= 3 elif 'down' in key: self.y += 3
- on_key_up(key)[Quellcode]#
Called once when a previously pressed key is released.
- Parameter:
key – List of key name variants, same format as in
on_key_down.
Beispiele
@player.register def on_key_up(self, key): if 'space' in key: player.stop_animation()
- on_mouse_leave(position)[Quellcode]#
Called when the mouse cursor leaves the actor area.
- Parameter:
position – The mouse position when it left the actor.
Beispiele
@actor.register def on_mouse_leave(self, position): self.costume.transparency = 0 # restore normal look
- on_mouse_left(position)[Quellcode]#
Called when the left mouse button is clicked.
The event is triggered for the click itself, independent of whether the click happened on the actor. Use detect_pixel(position) if you only want clicks on the actor body.
- Parameter:
position – Current mouse position as (x, y).
- on_mouse_left_down(position)[Quellcode]#
Wird aufgerufen, wenn die linke Maustaste gedrückt wird.
- on_mouse_left_released(position)[Quellcode]#
Method is called when left mouse key is released.
Beispiele
Sie können on_mouse_left_release verwenden, um ein drag_and_drop-Ereignis zu implementieren
from miniworlds import * world = World(200, 200) circle = Circle((30, 30), 60) circle.direction = 90 circle.dragged = False @circle.register def on_mouse_left(self, mouse_pos): if self.detect_pixel(mouse_pos): self.dragged = True @circle.register def on_mouse_left_released(self, mouse_pos): if not world.is_mouse_pressed(): self.dragged = False self.center = mouse_pos world.run()
Ausgabe:
- Parameter:
position (tuple) – Aktuelle Mausposition als Tupel (x,y)
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_mouse_motion(position)[Quellcode]#
Called when the mouse moves.
The event is triggered for movement events in general. Use detect_pixel(position) if you only want motion over the actor body.
- Parameter:
position – Current mouse position as (x, y).
- on_mouse_over(position)[Quellcode]#
Called when the mouse cursor enters or moves over the actor area.
- Parameter:
position – Current mouse position as
(x, y).
Beispiele
@actor.register def on_mouse_over(self, position): self.costume.transparency = 100 # semi-transparent on hover
- on_mouse_right(position)[Quellcode]#
Called when the right mouse button is clicked.
Use detect_pixel(position) if you only want clicks on the actor body.
- Parameter:
position – Current mouse position as (x, y).
- on_mouse_right_down(position)[Quellcode]#
Wird aufgerufen, wenn die rechte Maustaste gedrückt wird.
- on_mouse_right_released(position)[Quellcode]#
Method is called when right mouse key is released.
The behavior and arguments match on_mouse_left_released.
- Parameter:
position (tuple) – Aktuelle Mausposition als Tupel (x,y)
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_not_detecting_world()[Quellcode]#
Called when the actor is not touching the world (i.e. outside world bounds).
Useful to remove actors that fly off-screen.
Beispiele
Remove actor when it leaves the world:
@rocket.register def on_not_detecting_world(self): self.remove()
- Verursacht:
NotImplementedOrRegisteredError – Der Fehler tritt auf, wenn die Methode nicht überschrieben oder registriert wird.
- on_shape_change()[Quellcode]#
Hook, der aufgerufen wird, wenn sich formbezogene Actor-Eigenschaften ändern.
- property origin#
Aktueller Ursprungmodus für Größen- und Positionsoperationen.
- point_towards_actor(other)[Quellcode]#
Actor points towards another actor.
- Rückgabetyp:
- Parameter:
other – Der andere Actor
- Rückgabe:
Die neue Richtung
- point_towards_position(destination)[Quellcode]#
Actor points towards a given position
- Rückgabetyp:
- Parameter:
destination – Die Position, auf die der Actor zeigen sollte
- Rückgabe:
Die neue Richtung
Beispiele
Zeige auf mouse_position:
def act(self): mouse = self.world.mouse.get_position() if mouse: self.point_towards_position(mouse) self.move()
- register_sensor(*args, **kwargs)[Quellcode]#
This method is used for the @register_sensor decorator.
- remove(kill=True)[Quellcode]#
Entfernt diesen Actor aus der Welt
Examples: :rtype:
defaultdictEntfernt Roboter in thecrash.py :
def act(self): self.move() other = self.detecting_actor(distance = 0, actor_type=Robot) if other: explosion = Explosion(position=self.position) self.remove() other.remove()
- remove_costume(source=None)[Quellcode]#
Removes a costume from actor
- Parameter:
source – Der Index des neuen Kostüms oder Kostüm-Objekts. Standardmäßig das aktuelle Kostüm
- reset_costumes()[Quellcode]#
Entfernt alle Kostüme und setzt den Appearance-Zustand zurück.
- scale_height(value)[Quellcode]#
Skaliert die Actor-Höhe mit einem Faktor.
- scale_width(value)[Quellcode]#
Skaliert die Actor-Breite mit einem Faktor.
- send_message(message)[Quellcode]#
Sends a message to world.
Die Nachricht kann mit dem
on_message-Ereignis empfangen werdenBeispiele
Nachrichten senden und empfangen:
from miniworlds import * world = World() actor1 = Actor((2, 2)) actor1.add_costume((100,0,100,100)) @actor1.register def on_message(self, message): # Handle the message received self.send_message(f"got: {message}") actor2 = Actor((100,100)) actor2.send_message("Hello from actor2") @actor2.register def on_key_down_s(self): self.send_message("Hello") world.run()
- Parameter:
message (str) – Eine Zeichenkette, die die Nachricht enthält.
- set_background_color(color)[Quellcode]#
Setzt eine Hintergrundfarbe hinter das Kostümbild des Actors.
- set_costume(costume)[Quellcode]#
Setzt das aktuelle Kostüm über einen Index, eine Quelle oder ein Appearance-Objekt.
- set_direction(direction)[Quellcode]#
Actor points in given direction.
Sie können eine ganze Zahl oder einen String verwenden, um die Richtung zu beschreiben
- Rückgabetyp:
- Parameter:
string (The direction as integer or)
- Optionen
0,"up"- Nachschlagen90,"right", - Schau nach rechts-90,"left", - Schau nach links-180,180,"down"- Schau nach unten
Beispiele
Bewege dich mit den WASD-Tasten in eine Richtung
def on_key_down(self, keys): if "W" in keys: self.direction = "up" elif "S" in keys: self.direction = "down" elif "A" in keys: self.direction = "left" elif "D" in keys: self.direction = "right" self.move()
- set_position(value)[Quellcode]#
Setzt die Actor-Position in Weltkoordinaten.
- set_size(value)[Quellcode]#
Setzt die Actor-Größe als
(width, height)in Pixeln.
- set_world(new_world)[Quellcode]#
Verschiebt den Actor in eine andere Welt und gibt den Actor zurück.
- Rückgabetyp:
- show()[Quellcode]#
Zeigt einen Actor an (ein unsichtbarer Actor wird sichtbar)
- property static#
Should actor react to events? You can turn this option off for additional performance boost.
- stop_animation()[Quellcode]#
Stoppt die aktuelle Animation. Das Kostüm
is_animatedwird auf False gesetztBeispiele
from miniworlds import * world = World(columns=280, rows=100) robo = Actor(position=(0, 0)) robo.costume.add_images(["images/1.png", "images/2.png","images/3.png","images/4.png"]) robo.size = (99, 99) robo.animate_loop() @timer(frames = 100) def stop(): robo.stop_animation() world.run()
- property stroke_color#
Border color as RGBA tuple.
Notes
Set Actor.border to a value greater than 0 for a visible border.
Alias: Actor.stroke_color.
- switch_costume(source)[Quellcode]#
Switches the costume of actor
- Rückgabetyp:
- Parameter:
source – Anzahl der Kostüme oder Kostümobjekt
Beispiele
Ein Kostüm wechseln:
from miniworlds import * world = World(100,60) t = Actor() costume =t1.add_costume("images/1.png") t.add_costume("images/2.png") t.switch_costume(1) @timer(frames = 40) def switch(): t1.switch_costume(0) world.run()
- Rückgabe:
Das neue Kostüm
- switch_origin(value)[Quellcode]#
Wechselt den Ursprung des Actors und erhält dabei die sichtbare Position auf dem Bildschirm.
- turn_left(degrees=90)[Quellcode]#
Turns actor by degrees degrees left :rtype:
int
- Optionen:
Sie können den Wert actor.is_rotatable = False setzen, wenn Sie nicht möchten, dass der Actor gedreht wird.
Beispiele
from miniworlds import * world = World(100, 100) t = Actor() t.add_costume("images/arrow.png") t.size = (100,100) @t.register def act(self): t.turn_left(1) world.run()
Ausgabe:
- Parameter:
degrees – Grad in linker Richtung
- Rückgabe:
Neue Richtung
- turn_right(degrees=90)[Quellcode]#
Turns actor by degrees degrees right
Beispiele
from miniworlds import * world = World(100, 100) t = Actor() t.add_costume("images/arrow.png") t.size = (100,100) @t.register def act(self): t.turn_left(1) world.run()
Ausgabe:
- Optionen:
Sie können den Wert actor.is_rotatable = False setzen, wenn Sie nicht möchten, dass der Actor gedreht wird.
- Parameter:
degrees – Grad in linker Richtung
- Rückgabe:
Neue Richtung
- undo_move()[Quellcode]#
Mache den letzten Zug rückgängig. Bewegt den Actor zur letzten Position und setzt die Richtung zurück.
- Rückgabe:
Der bewegte Actor
Beispiele
zurückbewegen, wenn das Feld blockiert ist:
def on_detecting_wall(self, wall): self.undo_move()
- property visible#
Ob der Actor aktuell sichtbar ist.
- property width#
Die Breite des Actors in Pixeln.
Wenn die Breite eines Actors geändert wird, wird die Höhe proportional skaliert.
Beispiele
Erstellen Sie einen Actor und skalieren Sie die Breite/Höhe proportional:
from miniworlds import * world = World(800,400) def create_actor(x, y): t = Actor() t.position = (x, y) t.add_costume("images/alien1.png") t.border = 1 return t t0 = create_actor(0,0) t1 = create_actor(50,0) t1.height = 400 t2 = create_actor(300,0) t2.width = 180 world.run()
- property world#
Welt, zu der dieser Actor gehört.