Actor

Inhalt

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:

actor_count

class_image

origin

Aktueller Ursprungmodus für Größen- und Positionsoperationen.

collision_type

collision_type gibt an, wie Kollisionen überprüft werden sollen:

is_blockable

A actor with the property is_blockable cannot move through actors with the property is_blocking.

is_blocking

A actor with the property is_blockable cannot move through actors with the property is_blocking.

layer

Defines the layer on which the actor is drawn if several actors overlap.

last_position

Actor-Position im letzten Frame

last_direction

Richtungswert aus dem vorherigen Frame.

costume_count

Returns number of costumes of actor, 0 if actor has no costume

is_flipped

Ob das Actor-Kostüm an der horizontalen Achse gespiegelt ist.

costume

Gets the costume of the actor, if available.

costumes

Ruft den Kostümmanager ab

orientation

Ausrichtungsversatz des Kostüms in Grad.

direction

Directions are handled exactly as in the Scratch programming language, see: Scratch Wiki

direction_at_unit_circle

Erhält die Richtung als Wert im Einheitskreis (0° rechts, 90° oben, 180° links…)

size

Größe des Actors

width

Die Breite des Actors in Pixeln.

height

Die Höhe des Actors in Pixeln.

x

Der x-Wert eines Actors

y

Der y-Wert eines Actors

class_name

Klassenname dieser Actor-Instanz.

topleft_x

x-Wert der oberen linken Position des Actors

topleft_y

y-value of actor topleft-position

topleft

Oben-links-Position des Actors in Weltkoordinaten.

local_center

x-Wert der Actor-Mittelposition innerhalb des aktuellen Kamerabildschirms

center_x

x-Wert der Actor-Mittelposition

center_y

y-Wert der Actor-Mittelposition

center

Mittelpunktposition des Actors in Weltkoordinaten.

is_rotatable

Legt fest, ob das Kostüm eines Actors drehbar sein soll.

static

Should actor react to events? You can turn this option off for additional performance boost.

fill_color

Fill color of the actor as RGBA tuple.

color

Fill color of the actor as RGBA tuple.

is_filled

Ist der Actor mit Farbe gefüllt?

border_color

Border color as RGBA tuple.

stroke_color

Border color as RGBA tuple.

border

Border width of the actor.

visible

Ob der Actor aktuell sichtbar ist.

world

Welt, zu der dieser Actor gehört.

image

Das Bild des Actors:

position

Die Position des Actors als Position(x, y)

Inherited from ActorBase

dirty

Wenn der Actor dirty ist, wird er neu gezeichnet.

rect

Das umgebende Rechteck als pygame.Rect.

position_manager

sensor_manager

costume_manager

Inherited from DirtySprite

visible

You can make this sprite disappear without removing it from the group assign 0 for invisible and 1 for visible

layer

Die 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 Sprite

image

rect

layer

Dynamic, 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.

reset_costumes()

Entfernt alle Kostüme und setzt den Appearance-Zustand zurück.

set_background_color(color)

Setzt eine Hintergrundfarbe hinter das Kostümbild des Actors.

next_costume()

Switches to the next costume of actor

has_costume()

Gibt True zurück, wenn der Actor aktuell ein Kostüm hat.

turn_left([degrees])

Turns actor by degrees degrees left :rtype: int

turn_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).

undo_move()

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

before_remove()

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

detect_left_border()

Does the actor touch the left border?

detect_right_border()

Does the actor touch the right border?

detect_top_border()

Does the actor touch the top border?

detecting_bottom_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?

is_inside_world()

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

stop_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()

on_detecting_world is called, when actor is on the world

on_not_detecting_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.

get_local_rect()

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.

new_costume()

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

on_shape_change()

Hook, der aufgerufen wird, wenn sich formbezogene Actor-Eigenschaften ändern.

Inherited from ActorBase

register(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

__rect

Inherited from ActorBase

_abc_impl

Private 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


actor_count: int = 0#
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:

Costume

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:

Actor mit Bild als Kostüm erstellen

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:

Actor mit Bild als Kostüm erstellen

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:

Erstelle mehrere Kostüme und wechsle zwischen den Kostümen
Rückgabe:

Das neue Kostüm.

add_costumes(sources)[Quellcode]#

Adds multiple costumes

Rückgabetyp:

Costume

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: Actor

Bemerkung

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 center: Tuple[float, float]#

Mittelpunktposition des Actors in Weltkoordinaten.

property center_x: float#

x-Wert der Actor-Mittelposition

property center_y: float#

y-Wert der Actor-Mittelposition

class_image: str = ''#
property class_name: str#

Klassenname dieser Actor-Instanz.

property collision_type: str#

collision_type gibt an, wie Kollisionen überprüft werden sollen:

  • default: Kachel für TiledWorlds, ‘Maske’ für Pixelwelten

  • tile: 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: Costume#

Gets the costume of the actor, if available.

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:

int

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:

Optional[Actor]

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:

Actor

detect_actor_in_front(actors=None, distance=1)[Quellcode]#

Erkennt und liefert den ersten Actor direkt vor diesem Actor.

Rückgabetyp:

Actor

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:

list

Rückgabe:

Eine Liste von Actorn

detect_actors_in_front(actors=None, distance=1)[Quellcode]#

Erkennt alle Actors direkt vor diesem Actor.

Rückgabetyp:

list

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:

List[Actor]

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: List

distance: 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:

bool

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

Rückgabetyp:

Union[Tuple, List]

Parameter:
  • direction – Gibt die Richtung an, in der die Sensoren suchen.

  • distance – Gibt den Abstand vor dem Aktuator an, auf den die Sensoren reagieren.

Rückgabe:

Alle vom Sensor gefundenen Farben

detect_left_border()[Quellcode]#

Does the actor touch the left border?

Rückgabetyp:

bool

Rückgabe:

Wahr, wenn eine Grenze gefunden wurde.

detect_pixel(position)[Quellcode]#

Is the actor colliding with a pixel?

Rückgabetyp:

bool

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:

bool

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:

bool

Rückgabe:

Wahr, wenn eine Grenze gefunden wurde.

detect_top_border()[Quellcode]#

Does the actor touch the top border?

Rückgabetyp:

bool

Rückgabe:

Wahr, wenn eine Grenze gefunden wurde.

detecting_bottom_border()[Quellcode]#

Does the actor touch the lower border?

Rückgabetyp:

bool

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 . Alle Actors schauen "nach oben"

Bewege dich weiter, Welt

Werte für Richtung

  • oder "up": oben

  • 90° oder "rechts": Nach rechts bewegen

  • -90° oder "left": Nach links bewegen

  • 180° 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" - Nachschlagen

  • 90, "right", - Schau nach rechts

  • -90, "left", - Schau nach links

  • -180, 180, "down" - Schau nach unten

../_images/direction.png

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

../_images/flip_x.png

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

Rückgabetyp:

float

Parameter:

obj – Actor oder Position

Rückgabe:

Der Abstand zwischen dem Actor (gemessen von actor.center) zum Actor oder zur Position.

Rückgabetyp:

float

get_local_rect()[Quellcode]#

Gibt das Actor-Rechteck in kamera-lokalen Koordinaten zurück.

Rückgabetyp:

Rect

has_costume()[Quellcode]#

Gibt True zurück, wenn der Actor aktuell ein Kostüm hat.

Rückgabetyp:

bool

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()
Texturiertes Bild
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_blockable cannot move through actors with the property is_blocking.

property is_blocking#

A actor with the property is_blockable cannot move through actors with the property is_blocking.

property is_filled#

Ist der Actor mit Farbe gefüllt?

property is_flipped: bool#

Ob das Actor-Kostüm an der horizontalen Achse gespiegelt ist.

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 direction gedreht werden, aber sein Kostüm wird nicht verändert

Bemerkung

Sie können auch actor.costume.is_rotatable verwenden

Beispiele

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_direction: int#

Richtungswert aus dem vorherigen Frame.

property last_position: Tuple[float, float]#

Actor-Position im letzten Frame

Kann verwendet werden, um Änderungen zu verfolgen.

property layer: int#

Defines the layer on which the actor is drawn if several actors overlap.

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

../_images/move.png
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

../_images/move_in_direction.png
Optionen
  • 0, “up” - Nachschlagen

  • 90, “rechts”, - Schau nach rechts

  • -90, “links”, - Schau nach links

  • -180, 180, “unten” - Schau nach unten

../_images/direction.png
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)

../_images/move_to.png
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 example on_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 as on_key_pressed_w or on_key_pressed_left for 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 orientation: float#

Ausrichtungsversatz des Kostüms in Grad.

property origin#

Aktueller Ursprungmodus für Größen- und Positionsoperationen.

point_towards_actor(other)[Quellcode]#

Actor points towards another actor.

Rückgabetyp:

int

Parameter:

other – Der andere Actor

Rückgabe:

Die neue Richtung

point_towards_position(destination)[Quellcode]#

Actor points towards a given position

Rückgabetyp:

Union[int, float]

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()
property position: Tuple[float, float]#

Die Position des Actors als Position(x, y)

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: defaultdict

Entfernt 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 werden

Beispiele

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:

float

Parameter:

string (The direction as integer or)

Optionen
  • 0, "up" - Nachschlagen

  • 90, "right", - Schau nach rechts

  • -90, "left", - Schau nach links

  • -180, 180, "down" - Schau nach unten

../_images/direction.png

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:

Actor

show()[Quellcode]#

Zeigt einen Actor an (ein unsichtbarer Actor wird sichtbar)

property size: tuple#

Größe des Actors

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_animated wird auf False gesetzt

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()
@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:

Costume

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.

property topleft: Tuple[float, float]#

Oben-links-Position des Actors in Weltkoordinaten.

property topleft_x: float#

x-Wert der oberen linken Position des Actors

property topleft_y: float#

y-value of actor topleft-position

turn_left(degrees=90)[Quellcode]#

Turns actor by degrees degrees left :rtype: int

../_images/turn_left.png
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

../_images/turn_right.png

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.

../_images/move_back.png
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()
Texturiertes Bild
property world#

Welt, zu der dieser Actor gehört.

property x: float#

Der x-Wert eines Actors

property y: float#

Der y-Wert eines Actors