Observed since 20 Oct, 15:24 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A 2D simple animation module for pygame.
A lightweight 2D sprite frame animation library developed based on Pygame. It is concise and easy to use, enabling quick implementation of character animation playback. Equipped with a camera function. Comes with a real-time online frame animation editor.
It also has a built-in help function; call the animation_help() function to get assistance.
pip install pygame
import pygame
from Animation import Animation, AnimationSprite
# Sprite class (ensures correct initialization)
class Player(pygame.sprite.Sprite, AnimationSprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
AnimationSprite.__init__(self)
# Sprite image
self.image = pygame.Surface((50, 50))
self.image.fill((0, 255, 0))
self.rect = self.image.get_rect(center=(x, y))
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
Animation.add_file_path(r"D:\image\player_walk_1.png", "player_walk")
# Create sprite
player = Player(400, 300)
group = pygame.sprite.Group()
group.add(player)
# Start moving automatically on run
player.move_to_position_in(100, 100, 150)
# Main loop
running = True
while running:
# 1. Clear screen
screen.fill((0, 0, 0))
# Event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 2. Update animation (must be called before draw)
player.update_animation()
# 3. Draw elements
group.draw(screen)
Animation.image_show("player_walk", 200, 300, screen)
Animation.animation_start("player_walk", 4)
# 4. Refresh screen (final step)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Register animation file path and alias
def add_file_path(file_path: str, alias: str, wait: int)
Display the current animation frame at a specified position on the window
def image_show(alias: str, x: int, y: int, window: pygame.Surface)
Drive automatic frame switching for animation, and call the callback function when the animation ends
def animation_start(alias: str, count: int, callback : Optional[Callable[[], None]] = None, add_underline: bool = True, file_type: str = "png")
Stop animation playback
def animation_stop(alias : str)
Set the current animation frame
def set_animation_frame(alias : str, frame : int = 1)
Set the animation playback speed
def set_animation_speed(alias : str, speed : int = 2)
Reverse animation playback
def animation_reverse(alias : str)
Restore animation playback
def animation_reverse_back(alias : str)
This class is a parent class provided by the 2D-Animation-lib. Only by inheriting this class can an object be controlled by the camera.
This class is used to get the status of the animation.
For example:
Animation.AnimationStatus("player_walk").get_settings() # Returns the animation settings in json format
Animation.AnimationStauts("player_walk").get_status("")
↑
In this case, you can fill in:
"animation_started",
"image_showing",
"animation_start",
"animation_end",
"animation_reverse"
These status information.
Parameters:
alias: alias
Raises:
NotFoundAliasError - alias not found.
This module is used to control the display portion of the window.
def set_screen_center(x: int, y: int)
This function must be called in the main program. It is used to set the center position of the window. If your window is named screen, simply copy the following code (requires importing pygame):
set_screen_center(screen.get_width()/2, screen.get_height()/2)
get_screen_center(string: str = "x")
This function retrieves the center coordinates of the window, but only after set_screen_center() has been called.
set_minimum(minimum: float)
Sets the minimum camera zoom level.
The default value is 0.00000000000001, i.e., 1e-16.
The smaller this value, the smaller the maximum camera zoom.
Do not set it lower than this value; this value is optimal. Please do not change it unless absolutely necessary.
set_return_change(self, value: bool)
Sets whether to return the current value. This only applies to functions whose names begin with Camera.
The value is returned, not printed.
move(self, x: int, y: int)
Moves the camera.
set_position(self, x: int, y: int)
Sets the camera's coordinates.
get_position(self)
Gets the camera's coordinates.
add_size(self, size: int)
Increases the distance between the camera and the ground.
set_size(self, size: int)
Sets the distance between the camera and the ground.
get_size(self)
Gets the distance between the camera and the ground.
turn_left(self, angle: int)
Rotates the camera to the left.
turn_right(self, angle: int)
Rotates the camera to the right.
set_direction(self, angle: int)
Sets the camera's direction.
get_direction(self)
Gets the camera's direction.
- def get_status(status : Literal["animation_started",
"image_showing",
"animation_start",
"animation_end",
"animation_reverse"])
This folder is used to store practical methods.
from method.line_coll import Line
line = Line(x1, y1, x2, y2)
This creates a line segment object that supports various operations.
WINDOW_WIDTH, WINDOW_HEIGHT = screen.get_size()
# Settings: Display area at the bottom right corner
grid_width = 320 # Width
grid_height = 500 # Height
# Position: Bottom right corner with margins reserved
margin = 20
grid_x = WINDOW_WIDTH - grid_width - margin
grid_y = WINDOW_HEIGHT - grid_height - margin - 15
# Create a grid (display in 2 columns)
grid = image_scrolling.InfiniteImageGrid(
x=grid_x,
y=grid_y,
width=grid_width,
height=grid_height,
columns=2, # 2 columns
thumbnail_size=130, # Thumbnail size
spacing=12 # Spacing
)
This creates an infinitely scrollable grid for displaying images.
Further updates may be released later, suggestions are welcome
QQ Email: watermeloncode@foxmail.com
[1.6.1] 2026.5.31
[1.6.0] 2026.5.31
Non-destructive changes
Simplified animation_help and stored the help documentation as a .txt file
Updated AnimationEngine
Changed the file extension to .animdata
Files are no longer stored as JSON, but as a ZIP archive
[1.5.0] 2026.5.30
[1.4.0] None
[1.3.0] 2026.5.10
[1.1.0] 2025.5.3
[1.0.0] 2026.5.2
WatermelonJuiceCode Bilibili: WatermelonJuiceCode WeChat: WatermelonJuiceCode QQ: 3931840613
基于 Pygame 开发的轻量级 2D 序列帧动画库,简洁易用,快速实现角色动画播放。拥有摄像机功能。拥有实时在线帧动画编辑器。 以及拥有内置的寻求帮助,使用 animation_help() 函数去寻求帮助。
pip install pygame
import pygame
from Animation import Animation, AnimationSprite
# 精灵类(保证初始化正确)
class Player(pygame.sprite.Sprite, Animation.AnimationSprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
Animation.AnimationSprite.__init__(self)
# 精灵图片
self.image = pygame.Surface((50, 50))
self.image.fill((0, 255, 0))
self.rect = self.image.get_rect(center=(x, y))
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
Animation.add_file_path(r"D:\image\player_walk_1.png", "player_walk")
# 创建精灵
player = Player(400, 300)
group = pygame.sprite.Group()
group.add(player)
# 一运行就自动开始移动
player.move_to_position_in(100, 100, 150)
# 主循环
running = True
while running:
# 1. 清屏
screen.fill((0, 0, 0))
# 事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 2. 更新动画(必须写在 draw 前面)
player.update_animation()
# 3. 绘制
group.draw(screen)
Animation.image_show("player_walk", 200, 300, screen)
Animation.animation_start("player_walk", 4)
# 4. 刷新屏幕(最后一步)
pygame.display.flip()
clock.tick(60)
pygame.quit()
注册动画文件路径与别名
def add_file_path(file_path: str, alias: str, wait: int)
在窗口指定位置显示当前动画帧
def image_show(alias: str, x: int, y: int, window: pygame.Surface)
驱动动画自动切换帧,与动画结束后调用 callback 回调函数
def animation_start(alias: str, count: int, callback : Optional[Callable[[], None]] = None, add_underline: bool = True, file_type: str = "png")
停止动画播放
def animation_stop(alias : str)
设置动画当前帧
def set_animation_frame(alias : str, frame : int = 1)
设置动画播放速度
def set_animation_speed(alias : str, speed : int = 2)
反转动画播放
def animation_reverse(alias : str)
恢复动画播放
def animation_reverse_back(alias : str)
这个类是 2D-Animation-lib 提供的父类,只有继承这个类才能被摄像机操控
这个类用于获取动画的状态。 例如: Animation.AnimationStatus("player_walk").get_settings() # 返回json格式的动画设置 Animation.AnimationStauts("player_walk").get_status("") ↑ 在这里可以填: "animation_started", "image_showing", "animation_start", "animation_end", "animation_reverse" 这些状态信息。
参数:
alias: 别名
引发:
NotFoundAliasError - 别名不存在。
这个用于控制窗口的显示部分
def set_screen_center(x : int, y : int)
这个函数在主程序中必须要写,用于设置该窗口的中心位置。假如你的窗口是 screen 的,那么直接复制一下代码即可(需要导入 pygame)
set_screen_center(screen.get_width()/2, screen.get_height()/2)
get_screen_center(string : str = "x")
这个函数是获取窗口的中心坐标,但前提是已经设置 set_screen_center(string : str = "x") 了
set_minimum(minimum : float)
设置最小摄像机缩放。 默认是 0.00000000000001,也就是 1e-16。 这个值越小,摄像机的最大缩放就越小。 但不要小过这个值,这个值是最佳的,如果不是必须,请别碰它。
set_return_change(self, value : bool)
设置是否返回当前的值,仅限以 Camera 开头的函数。 是返回,不是打印(print)。
move(self, x : int, y : int)
移动摄像机
set_position(self, x : int, y : int)
设置摄像机的坐标
get_position(self)
获取摄像机的坐标。
add_size(self, size : int)
增加摄像机与地面的距离。
set_size(self, size : int)
设置摄像机与地面的距离。
get_size(self)
获取摄像机与地面的距离
turn_left(self, angle : int)
向左转摄像机
turn_right(self, angle : int)
向右转摄像机
set_direction(self, angle : int)
设置摄像机的方向。
get_direction(self)
获取摄像机的方向
这个函数返回的是一个json格式的字符串,包含了动画的大部分信息。
- def get_status(status : Literal["animation_started",
"image_showing",
"animation_start",
"animation_end",
"animation_reverse"])
这个函数返回的是当前动画的一些状态信息。 比如: animation_started -> bool image_showing -> bool animation_start -> bool animation_end -> bool animation_reverse -> bool
QQ获取:
这个文件夹用于存放一些实用方法。
from method.line_coll import Line
line = Line(x1, y1, x2, y2)
这样就可以创建一个线段对象,可以进行很多操作。
WINDOW_WIDTH, WINDOW_HEIGHT = screen.get_size()
# 设置:显示区域在右下角
grid_width = 320 # 宽度
grid_height = 500 # 高度
# 位置:右下角,留出边距
margin = 20
grid_x = WINDOW_WIDTH - grid_width - margin
grid_y = WINDOW_HEIGHT - grid_height - margin - 15
# 创建网格(2列显示)
grid = image_scrolling.InfiniteImageGrid(
x=grid_x,
y=grid_y,
width=grid_width,
height=grid_height,
columns=2, # 2列
thumbnail_size=130, # 缩略图大小
spacing=12 # 间距
)
这样就可以创建一个无限滚动的网格,可以显示图片。
后续可能会继续更新,欢迎提出建议
[1.6.1] 2026.5.31(第六个版本的补丁)
[1.6.0] 2026.5.31(第六个版本)
[1.5.0] 2026.5.30(第五个版本)
[1.4.0] None (第四个版本)
[1.3.0] 2026.5.10 (第三个版本)
[1.2.0] 2026.5.3 (第二个版本)
[1.0.0] 2026.5.2 (第一个版本)
西瓜汁Code B站:西瓜汁Code 微信:WatermelonJuiceCode QQ:3931840613
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.6.2 | 24 Jul 2026 | 1 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 15:24 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:b8efd143e2affbcb286fa811138daaad21e040ecd9b348b590aac241eeffb78e