pygame实现物体运动拖尾尾迹

前言

😎🥳😎🤠🤖🙈💭🍳🍱

本文我们来讲一下如何使用pygame实现一个拖尾特效。


主要内容

🦞🦐🦀🦑🦪

讲解:

一分钟一个pygame案例,在这两集我们将要学习一下如何使用pygame来实现视频中的物体运动尾迹拖尾效果,非常非常简单。

当然我们这里只是实现了物体本身拖尾,透明度递减的物体拖尾,以及彩色线条拖尾,其实还具有粒子效果拖尾,纹理图拖尾矢量图形拖尾等,后面我们有机会或者大家想看的话也可拿出来讲一讲。 下面我们还是老规矩,先讲效果实现思路,再讲效果的实现代码。

首先,你可以暂停视频五秒钟,思考一下,如果是你,你会如何实现这样的效果。

好了,现在揭晓答案,无论是前面的小球,还是后面的线条,其实他们都是一样的原理,我们快速的移动鼠标可以发现运动尾迹其实就是物体经过的地方依旧绘制有物体图案,然后在一定时间后消失组成的效果。

其实我们可以将这一过程抽象为有一个长度固定的物体数组,将这些物体全部绘制在窗口上,之所以不运动的时候你只看到了一个物体,是因为所有的物体重合了,所以你只能看到一个。而运动的时候所有的物体的坐标不再一致,所以会显示一连串。

没错,就是这么简单,就是画一个圆与多个圆的区别,那么知道这一原理后,我们绘制出透明度逐渐减少的尾迹也只是改变下颜色的问题。但在pygame的主窗口中,是不支持rgba颜色的,所以我们后面也会给出解决方案。

现在,我们先来看绘制多个物体实现尾迹的实现代码。

还是老规矩,我们不再讲那些基础的代码,只讲与本视频知识点有关系的代码。我们在这里定义小球的半径和颜色,在这里定义小球的初始位置和初始速度,然后定义一个列表用于存储多个物体。

在事件的循环中,我们不断获取鼠标的位置,并且根据鼠标位置和小球的位置去更新小球的速度,再根据小球速度去更新小球的位置。然后将小球的位置信息添加进小球数组,这样就实现了记录路径上小球的功能。

然后我们用白色填充屏幕,接着画出列表中每一个小球,最重要的是,我们最多每次取出列表后20个小球,防止小球的无限增长。

好了,代码已经讲解完毕,是不是非常简单。下面我们来看一下运行的效果。

当然,显示的效果这些参数都是可以修改的,比如小球的颜色,大小,乃至小球拖尾的长度。

比如说我们这里将小球大小改为100,颜色改为黑色,拖尾长度改为5个。可以看到这样的效果。

怎么样,是不是很简单。下面几集我们来介绍如何绘制透明度变化的物体拖尾与渐变拖尾。关注阿婆主,获取第一手知识。

代码

python 复制代码
import pygame
import sys

# 初始化并屏幕大小,创建屏幕,设置窗口的标题,即游戏名称
pygame.init()
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_icon(pygame.image.load('logo.png').convert())
pygame.display.set_caption('编程启航')

# 小球属性
ball_radius = 20
ball_color = (0, 0, 255)

# 小球的位置和速度
ball_pos = [screen_width // 2, screen_height // 2]
ball_velocity = [0, 0]

# 拖尾效果所需的轨迹点
trail_points = []

# 游戏循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 获取鼠标位置
    mouse_pos = pygame.mouse.get_pos()

    # 更新小球速度
    ball_velocity[0] = (mouse_pos[0] - ball_pos[0]) * 0.1
    ball_velocity[1] = (mouse_pos[1] - ball_pos[1]) * 0.1

    # 更新小球位置
    ball_pos[0] += int(ball_velocity[0])
    ball_pos[1] += int(ball_velocity[1])

    # 添加当前位置到轨迹点列表
    trail_points.append(ball_pos.copy())

    # 清空屏幕
    screen.fill((255, 255, 255))

    # 更新和绘制轨迹点
    for i, point in enumerate(trail_points):
        pygame.draw.circle(screen, ball_color, point, ball_radius)
    
    # 控制小球数量
    trail_points = trail_points[-20:]

    # 更新屏幕,控制帧率
    pygame.display.flip()
    pygame.time.Clock().tick(60)

pygame.quit()
sys.exit()

总结

🐋 🐬 🐶 🐳 🐰 🦀☝️ ⭐ 👉 👀

如果你对这篇文章感兴趣,欢迎在评论区留言,分享你的想法和建议。如果你喜欢我的博客,请记得点赞、收藏和关注我,我会持续更新更多有用的网页技巧和教程。谢谢大家!


更多宝藏

🍇🍉🍊🍏🍋🍅🥝🥥🫒🫕🥗 项目仓库看这里🤗: github.com/w-x-x-w gitee.com/w-_-x 公众号名称😮:编程启航 博客文章看这里🤭: blog.csdn.net/weixin_6265... 视频推送看这里🤤: space.bilibili.com/1909782963

相关推荐
CSXB996 分钟前
三十四、Python基础语法(文件操作-上)
开发语言·python·功能测试·测试工具
亚图跨际1 小时前
MATLAB和Python及R潜变量模型和降维
python·matlab·r语言·生物学·潜变量模型
IT古董1 小时前
【机器学习】决定系数(R²:Coefficient of Determination)
人工智能·python·机器学习
德育处主任Pro1 小时前
『Django』APIView基于类的用法
后端·python·django
Star Patrick1 小时前
算法训练(leetcode)二刷第十九天 | *39. 组合总和、*40. 组合总和 II、*131. 分割回文串
python·算法·leetcode
武子康2 小时前
大数据-213 数据挖掘 机器学习理论 - KMeans Python 实现 距离计算函数 质心函数 聚类函数
大数据·人工智能·python·机器学习·数据挖掘·scikit-learn·kmeans
写点什么啦2 小时前
使用R语言survminer获取生存分析高风险和低风险的最佳截断值cut-off
开发语言·python·r语言·生存分析·x-tile
武子康2 小时前
大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels
大数据·人工智能·python·深度学习·算法·机器学习·数据挖掘
封步宇AIGC3 小时前
量化交易系统开发-实时行情自动化交易-Okex K线数据
人工智能·python·机器学习·数据挖掘
封步宇AIGC3 小时前
量化交易系统开发-实时行情自动化交易-Okex交易数据
人工智能·python·机器学习·数据挖掘