animator.scene.Scene¶
- class animator.scene.Scene(width: int | str = 854, height: int = 480, fps: float = 30, scale: float | tuple[int, int] | str = 1)¶
Bases:
object
The scene class. This is the main class for creating animations. It initializes a frame and a canvas to draw on, and provides methods for displaying and saving them.
- Variables
width – The width of the frame/scene.
height – The height of the frame/scene.
fps – The FPS used for animations.
frame – The internal frame (array) used for drawing. The data type is in RGBA format.
canvas – The
skia.Canvas
used for drawing.bgcolor – The background color of the scene. This is used when clearing the scene after each frame.
- __init__(width: int | str = 854, height: int = 480, fps: float = 30, scale: float | tuple[int, int] | str = 1) None ¶
- Parameters
width – The width of the frame/scene or a string representing a resolution. Resolutions can be one of ‘144p’, ‘240p’, ‘360p’, ‘480p’, ‘720p’, ‘hd’, ‘1080p’, ‘fhd’, ‘fullhd’, ‘1440p’, ‘2k’, ‘2160p’, ‘4k’, ‘uhd’, ‘ultrahd’. The resolution strings are case-insensitive and may contain whitespaces.
height – The height of the frame/scene.
fps – The FPS used for saving the animation. The FPS used for displaying the animation may be different.
scale – Amount to scale the frame up or down. This can be a float, in which case the frame is scaled by that amount, or a tuple of two integers, in which case the frame is scaled to that size. This can also be a string representing a resolution (see width parameter). During displaying animations a large frame may cause lag or not fit on the screen. This factor is used to scale the frame down. By specifying a value >1, the frame can also be scaled up. If the aspect ratio of the frame is different from that of the scene, the frame will be centered.
Methods
__init__
([width, height, fps, scale])- param width
The width of the frame/scene or a string representing a resolution. Resolutions can be one of
add
(*entities)Add one or more entities to the scene.
animate
(*animations)Adds one or more animations to the scene.
clear
()Clears the frame and fills it with transparency.
Clears the frame and fills it with the background color.
play_frames
([delay, keep_open])Plays the animation by displaying each frame in the scene.
A simple way to quickly draw something on the scene.
r2a
(pos[, padding])Convert a point from the scene's relative coordinate system to absolute coordinates.
r2a_bounds
(bounds, pos[, anchor, padding])Convert the position of a bounding box from the scene's relative coordinate system to absolute coordinates.
save_frame
(path[, quality])Saves the current frame to a file.
Displays the current frame.
update
()Updates the scene.
wait
(seconds)Waits for a specified amount of seconds before continuing.
Attributes
An instance of
Context2d
wrapping the canvas.- add(*entities: animator.entity.entity.Entity) None ¶
Add one or more entities to the scene.
- Parameters
entities – The entities to add.
- animate(*animations: animator.anim.anim.Anim) None ¶
Adds one or more animations to the scene.
- Parameters
animations – The animations to add.
- property context2d: animator.graphics.Context2d.Context2d¶
An instance of
Context2d
wrapping the canvas. AContext2d
wraps askia.Canvas
and provides additional methods for drawing. A scene contains a singleContext2d
instance, which can be accessed through this method.
- play_frames(delay: Optional[float] = None, keep_open: bool = True) None ¶
Plays the animation by displaying each frame in the scene.
- Parameters
delay – The delay between frames in seconds. If
None
, the delay is set to1 / fps
. If0
, the animation is played as fast as possible.keep_open – Whether to keep the animation open after playing. To close the animation, press
Esc
or close the window.
- quickdraw() Iterator[animator.graphics.Context2d.Context2d] ¶
A simple way to quickly draw something on the scene. This method clears the scene and returns a
Context2d
for drawing. When the context manager exits, the frame is displayed.>>> import animator as am >>> scene = am.Scene() >>> with scene.quickdraw() as ctx: ... ctx.circle(scene.width / 2, scene.height / 2, 120) ... ctx.fill() >>> # A circle is drawn at the center with a black background.
- r2a(pos: numpy.ndarray, padding: float = 25) animator.skia.Point ¶
Convert a point from the scene’s relative coordinate system to absolute coordinates.
- Parameters
pos – The point in relative coordinates, a 2 element numpy array [x, y]. The coordinates are between -1 and 1, where -1 is the left/top edge of the scene and 1 is the right/bottom edge.
padding – The extra space around the scene, in pixels.
- Returns
The point in absolute coordinates.
- r2a_bounds(bounds: animator.skia.Rect, pos: numpy.ndarray, anchor: Optional[numpy.ndarray] = None, padding: float = 25) animator.skia.Point ¶
Convert the position of a bounding box from the scene’s relative coordinate system to absolute coordinates.
- Parameters
bounds – The bounding box that is to be positioned.
pos – The position of the bounding box in relative coordinates, a 2 element numpy array [x, y]. The coordinates are between -1 and 1, where -1 is the left/top edge of the scene and 1 is the right/bottom edge.
anchor – The anchor point in the bounding box in relative coordinates, which will be positioned at pos. If
None
, it’ll be same as pos.padding – The extra space around the scene, in pixels.
- Returns
The position of the bounding box in absolute coordinates.
- save_frame(path: str, quality: int = 100) None ¶
Saves the current frame to a file.
- Parameters
path – The path to the file. The path may contain a
{}
placeholder, which will be replaced with the current frame number.quality – The quality of the image, between 0 and 100. Defaults to 100.