Python漂浮的爱心

系列文章

序号 直达链接
Tkinter
1 Python李峋同款可写字版跳动的爱心
2 Python跳动的双爱心
3 Python蓝色跳动的爱心
4 Python动漫烟花
5 Python粒子烟花
Turtle
1 Python满屏飘字
2 Python蓝色流星雨
3 Python金色流星雨
4 Python漂浮爱心
5 Python爱心光波①
6 Python爱心光波②
7 Python满天繁星
8 Python五彩气球
9 Python白色飘雪
10 Python七彩花朵
11 Python 3D星空
12 Python大雪纷飞
13 Python一闪一闪亮星星
14 Python爱心泡泡
15 Python爱心射线
16 Python圣诞礼物
17 Python礼物圣诞树
18 Python浪漫星空
19 Python飞舞蝙蝠
20 Python万圣礼物
21 Python蓝色飘雪
Pygame
1 Python跨年烟花
2 Python炫酷烟花
3 Python黑客帝国字母雨
敬请期待……

写在前面

Python实现漂浮爱心动画的完整代码。

技术需求

  1. Turtle 图形库

    • 利用 turtle 库实现图形绘制,开发了动态爱心动画。通过 Pen() 方法创建画笔对象,精确控制其运动、绘制及颜色属性。此外,turtle 库支持基本几何图形(如圆形、直线等)的绘制,适用于动画与图形界面设计。
  2. 面向对象编程 (OOP)

    • 定义 Heart 类以实现爱心的对象化管理。每个爱心实例拥有独立的属性(包括位置、速度、颜色和半径等)及方法(如移动、绘制等)。此设计确保了每个爱心的行为独立且封装良好,便于管理和扩展。
  3. 随机数生成

    • 借助 random 库生成随机数值,为爱心的属性(如位置、大小、颜色和速度)赋予随机值。这使得每次运行时,爱心的位置、运动轨迹和速度各不相同,增强了动画的随机性和趣味性。
  4. 数学计算

    • 运用 math 库中的三角函数 sin() 控制爱心的左右摆动。正弦函数的变化使爱心的水平运动轨迹呈现出波动效果,模拟自然漂浮的感觉。
  5. 动态画布更新

    • 采用 tu.tracer(0)tu.update() 优化画布更新过程。tu.tracer(0) 禁止自动刷新,防止绘制过程中屏幕闪烁;tu.update() 在所有绘制完成后一次性刷新屏幕,显著提升动画流畅度。
  6. 无限循环与实时动画

    • 通过 while True 循环实现爱心的持续漂浮与动态更新,营造连续的动画效果。每次循环中,爱心的位置都会被更新并重新绘制。

完整代码

import turtle as tu
import random as ra
import math


tu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['pink']
class Heart():    #每个爱心(爱心类)
    def __init__(self):
        self.r = ra.randint(10,15)        #爱心的半径
        self.x = ra.randint(-1000,1000)   #爱心的横坐标
        self.y = ra.randint(-500,500)     #爱心的纵坐标
        self.f = ra.uniform(-3.14,3.14)   #爱心左右移动呈正弦函数
        self.speed = ra.randint(5,10)     #爱心移动速度
        self.color = ra.choice(colors)    #爱心的颜色
        self.outline = 1                  #爱心的外框大小(可不要)
……

代码分析

这段 Python 代码利用 turtle 库和 random 库创建了一种动态效果,其中多个爱心在屏幕上飘浮,模拟了爱心随时间和运动的变化。以下将从代码的各个部分进行详细分析,重点关注其功能、实现过程及相关的技术细节。

1. 引入必要的库

import turtle as tu
import random as ra
import math
  • turtle:Python 的图形绘制模块,用于简单的图形和动画。
  • random:生成随机数的库,用于随机生成爱心的属性(如位置、速度等)。
  • math:提供数学运算支持,处理运动中的三角函数,特别是爱心的左右摆动。

2. 设置屏幕参数

tu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)
  • tu.setup(1.0, 1.0)tu.screensize(1.0, 1.0) 分别设置屏幕宽度和高度为最大范围,确保使用整个屏幕。

3. 创建画笔对象

t = tu.Pen()
t.ht()
  • t = tu.Pen() 创建一个控制 Turtle 画笔状态和位置的对象 t
  • t.ht() 隐藏画笔,仅显示绘制的爱心图形。

4. 定义颜色列表

colors = ['pink']

颜色列表目前只包含 'pink',表示所有爱心均为粉色,统一风格并便于未来扩展。

5. 定义 Heart 类

  • Heart 类表示一个漂浮的爱心对象。
  • self.r:随机生成半径(10 到 15)。
  • self.xself.y:随机生成初始位置(x:-1000 到 1000,y:-500 到 500)。
  • self.f:随机生成角度值(-π 到 π),控制左右移动。
  • self.speed:随机生成速度(5 到 10)。
  • self.color:从 colors 列表中随机选取颜色。
  • self.outline:外框线宽,默认为 1。

6. move 方法

  • 控制爱心的位置更新和漂浮。
  • 若爱心在画布内 (self.y <= 500),则垂直向下移动 (self.y += self.speed),水平方向根据正弦波状移动 (self.x += self.speed * math.sin(self.f)),并更新角度 (self.f += 0.1)。
  • 若超出下边界,则重新生成新的爱心对象。

7. draw 方法

  • 使用 turtle 绘制爱心形状。
  • 设置画笔外框宽度 (t.pensize(self.outline)),抬起画笔移动到指定位置 (t.goto(self.x, self.y)),放下画笔开始绘制 (t.pendown())。
  • 填充颜色 (begin_fill()end_fill()),设置初始角度 (t.setheading(120)),绘制两个半圆和底部 (t.circle(self.r, 195), t.fd(self.r * 2.4), t.left(90)).

8. 创建多个爱心对象

Hearts = []            
for i in range(100):
    Hearts.append(Heart())
  • Hearts 列表保存所有爱心对象,通过循环创建 100 个 Heart 实例。

9. 设置背景颜色

tu.bgcolor('black')
  • 将画布背景色设为黑色,突出粉色爱心。

10. 漂浮效果的实现

  • 进入无限循环模拟爱心漂浮。
  • 禁用自动刷新 (tu.tracer(0)) 提高性能。
  • 清除当前绘图 (t.clear()) 准备下一次绘制。
  • 循环绘制 50 个爱心对象 (for i in range(50)),调用 movedraw 方法。
  • 刷新画布 (tu.update()) 显示更新后的图形。

11. 总结

该代码通过定义 Heart 类结合随机属性和移动机制,使用 turtle 库实现了动态的爱心飘浮效果。每个爱心有随机的颜色、速度、位置和运动轨迹,模拟自由飘浮的效果。面向对象的设计使代码结构清晰且易于扩展。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

你可能感兴趣的:(python)