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

相关推荐
PythonFun4 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
炼丹师小米4 小时前
Ubuntu24.04.1系统下VideoMamba环境配置
python·环境配置·videomamba
GFCGUO5 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
985小水博一枚呀6 小时前
【深度学习基础模型】神经图灵机(Neural Turing Machines, NTM)详细理解并附实现代码。
人工智能·python·rnn·深度学习·lstm·ntm
萧鼎7 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
IFTICing8 小时前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合
大神薯条老师8 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
程序员爱德华8 小时前
Python环境安装教程
python
huanxiangcoco8 小时前
152. 乘积最大子数组
python·leetcode
萧鼎8 小时前
Python常见问题解答:从基础到进阶
开发语言·python·ajax