本项目实现了一个桌面宠物,它基于一组参数化方程来渲染一个动态的、类似鱼的形状。程序运行在一个透明的、无边框的窗口中,从而创造出宠物直接在您的桌面上游泳的错觉。
- 透明背景: 在一个无边框窗口中运行,并具有透明背景(仅限Windows)。
- 动态形态: 宠物的形状是使用数学方程实时生成和动画化的。
- 自主移动: 宠物会在屏幕上四处游荡,并能智能地避开边缘。
- 高度可配置: 动画速度、颜色、点密度等关键参数可以轻松调整。
- Python 3.x
- Pygame
- NumPy
- PyWin32 (用于Windows环境下的透明效果)
您可以使用 pip 安装所需的库:
pip install pygame numpy pywin32注意: pywin32 仅在Windows上实现透明效果时需要。该脚本为其他操作系统提供了备用方案,但背景将不透明。
直接执行Python脚本即可:
python FISHdesk.py按 ESC 键关闭应用程序。
程序的主要逻辑封装在 DesktopPet 类中。
- 创建一个无边框的全屏 Pygame 窗口。
- 在 Windows 上,使用
win32gui库来设置WS_EX_LAYERED窗口样式。然后将一个特定的颜色键(例如黑色)设置为完全透明,使窗口背景不可见。 - 宠物的初始状态(位置、角度)是随机的。
run() 方法包含主循环,该循环不断执行三个关键操作:
handle_events(): 监听键盘输入(例如按ESC退出)。update_state(): 更新宠物的位置、朝向和内部动画计时器。draw(): 将宠物渲染到屏幕上。
draw() 方法是视觉呈现的核心。在每一帧中:
- 用透明色键清除屏幕。
- 局部坐标计算: 使用 NumPy 解算复杂的参数方程,生成构成宠物身体的
NUM_POINTS个点的坐标。这些坐标是相对于原点 (0, 0) 的,并使用时间变量t进行动画处理。 - 旋转: 生成的点围绕原点进行旋转,以匹配宠物当前的朝向角度 (
pet_orientation_angle)。 - 平移: 旋转后的点被平移到宠物在屏幕上的全局位置 (
pet_x,pet_y)。 - 绘制: 每个点作为一个小圆圈被绘制在屏幕上。
- 宠物有一个
pet_target_angle(它想去的方向)和一个pet_orientation_angle(它当前面对的方向)。 - 在
update_state()中,朝向会平滑地插值到目标角度,从而创造出自然的转向动作。 check_bounds()函数防止宠物离开屏幕。当它离边缘太近时,会施加一个“排斥力”来修改pet_target_angle,使其转身离开。
所有主要参数都位于 FISHdesk.py 的顶部,可以修改它们进行实验:
NUM_POINTS: 用于绘制宠物的点的数量。影响密度和性能。TARGET_FPS: 目标帧率。DOT_SIZE: 每个点的大小。PET_COLOR: 宠物的颜色。PET_SPEED: 宠物在屏幕上移动的速度。ROTATION_SPEED: 宠物转向目标方向的速度。WANDER_STRENGTH: 宠物方向每帧随机变化的程度。WALL_REPULSION_STRENGTH: 宠物从屏幕边缘弹开的力度。
DesktopPet类: 包含所有逻辑。__init__(): 设置pygame、窗口和初始变量。handle_events(): 输入处理。update_state(): 所有非渲染逻辑(移动、物理)。draw(): 所有渲染逻辑(计算、变换、绘制)。check_bounds(): 边缘碰撞逻辑。run(): 主应用程序循环。
- 物理系统改良:作者认为现在的碰撞系统和移动方式仍然有很大的进步空间
- 交互性: 添加宠物对鼠标移动做出反应的行为(例如,跟随、逃跑)。
- 配置文件: 将硬编码的参数移动到外部配置文件(如
config.ini或config.json),让用户无需编辑代码即可自定义宠物。