Python星空特效炫酷展示

3D星空

系列文章

序号 直达链接
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模拟3D星空动画的完整代码。

技术需求

  1. Python turtle

  2. turtle库用于在屏幕上绘制图形和实现动画。通过Turtle对象,可以控制绘制的形状、位置、颜色等属性,并进行动态更新。
  3. turtle库的主要功能包括创建图形、设置画笔颜色、填充颜色、控制对象的速度和位置,以及隐藏和显示图形等。
  4. Python random

  5. random库用于生成随机数。在这段代码中,它被用来随机生成星星的位置、大小和移动速度,增加了动画的多样性和不可预测性。
  6. 例如,使用ra.uniform(0, 1)生成一个0到1之间的浮动数,来控制星星的大小;使用ra.randint()来生成随机的整数,以确定星星的初始位置和速度。
  7. Turtle 对象的克隆

  8. 通过turtle.clone()方法,克隆一个turtle对象,使每颗星星都拥有独立的属性(如位置、速度和大小)。每颗星星都是turtle对象的一个副本,因此它们可以独立地移动和变化。
  9. 循环控制

  10. 使用while True:无限循环和for循环来不断更新每颗星星的位置,使动画持续运行。
  11. 通过不断更新星星的位置来创建动态效果,并且当星星移出屏幕时,通过隐藏、重新设置位置并显示来实现星星的“循环出现”效果。
  12. 事件驱动模型

  13. tu.mainloop()启动了事件循环,保持图形窗口的持续显示和交互。这是turtle库和其他图形库常用的机制,用来让程序持续运行,直到用户关闭窗口。

完整代码

import turtle as tu
import random as ra
width, height = 800, 600
tu.setup(width, height)
tu.title("3D星空")
tu.bgcolor("black")
tu.delay(0)
t=tu.Turtle(visible=False,shape='circle')
t.pencolor("white")
t.fillcolor("white")
t.penup()
stars = []
……

代码分析

这段代码使用Python的turtle库创建了一个简单的3D星空动画效果,模拟了在黑暗背景上移动的星星。星星会随机生成,并且向左移动,当其移出屏幕时会重新出现在屏幕的右侧,从而形成一个连续的动态效果。代码的主要流程包括窗口设置、星星生成、星星移动和循环刷新。接下来,我将详细分析每个部分的功能及实现。

1. 导入库

import turtle as tu
import random as ra

这行代码导入了turtlerandom模块,分别用于绘制图形和生成随机数。turtle库是Python自带的一个图形绘制库,常用于绘制各种图形和动画。random库则用于生成随机数,这在本代码中用于随机生成星星的位置、大小和移动速度。

2. 设置窗口尺寸和背景

width, height = 800, 600
tu.setup(width, height)
tu.title("3D星空")
tu.bgcolor("black")
tu.delay(0)
  • width, height = 800, 600:定义了绘图窗口的宽度和高度为800×600像素。
  • tu.setup(width, height):设置绘图窗口的尺寸,宽度为800像素,高度为600像素。
  • tu.title("3D星空"):设置窗口的标题为"3D星空"。
  • tu.bgcolor("black"):设置窗口的背景色为黑色,这为星空提供了背景。
  • tu.delay(0):设置绘制的延迟为0,即关闭动画延迟,让图形的绘制过程尽量流畅。
  • 3. 创建turtle对象

    t = tu.Turtle(visible=False, shape='circle')
    t.pencolor("white")
    t.fillcolor("white")
    t.penup()
    

    这段代码创建了一个turtle对象t,用于绘制星星。具体细节如下:

  • tu.Turtle(visible=False, shape='circle'):创建一个形状为圆形、初始状态不可见的turtle对象。星星将由这个turtle对象的克隆来表示。
  • t.pencolor("white"):设置画笔颜色为白色,因为星星在黑色背景上应该是白色的。
  • t.fillcolor("white"):设置填充颜色为白色,虽然在这段代码中没有使用填充,但它定义了默认的颜色。
  • t.penup():提升画笔,防止在移动过程中留下痕迹。
  • 4. 创建星星

    这部分代码用于生成99颗星星,每颗星星通过克隆t对象来创建。分析如下:

  • stars = []:创建一个空的列表stars,用于存储所有的星星对象。
  • for i in range(99)::循环99次,生成99颗星星。
  • star = t.clone():通过clone()方法克隆一个turtle对象,每颗星星都将是t对象的一个独立副本。每颗星星都是一个turtle对象,因此可以独立移动。
  • s = ra.uniform(0, 1) / 3:生成一个0到1之间的随机数,并除以3,得到一个较小的值,作为星星的大小比例。shapesize(s, s)将星星的大小设置为这个比例,使星星看起来具有不同的尺寸。
  • star.shapesize(s, s):设置星星的形状大小,使得每颗星星的尺寸不同。
  • star.speed(ra.randint(2, 5)):设置星星的移动速度为一个2到5之间的随机整数。turtle的速度决定了星星的移动速度,数字越小,星星越快。
  • star.setx(ra.randint(width//2, width)):将星星的x坐标设置为从屏幕右侧开始的随机位置。ra.randint(width//2, width)生成一个位于屏幕右半部分的随机x坐标。
  • star.sety(ra.randint(-height//2, height//2)):将星星的y坐标设置为一个在屏幕上下方向上的随机位置。ra.randint(-height//2, height//2)生成一个在窗口上下范围内的随机y坐标。
  • star.showturtle():显示克隆出来的星星,初始时它是不可见的。
  • stars.append(star):将新创建的星星添加到stars列表中,方便后续进行移动操作。
  • 5. 星星的运动与循环

    这部分代码实现了星星的不断移动,并且当星星移出屏幕时,它会重新出现在屏幕右侧。具体实现细节如下:

  • while True::使用无限循环,使得星星的运动不断进行。
  • for star in stars::遍历stars列表中的所有星星对象,每次循环处理一颗星星的移动。
  • star.setx(star.xcor() - star.speed()):通过xcor()获取星星的当前x坐标,然后减去星星的速度,从而使星星向左移动。每颗星星的速度是随机的,因此它们的移动速度不同。
  • if star.xcor() < -width//2::判断星星的x坐标是否小于窗口左侧的边界。如果是,说明星星已经离开屏幕的左侧。
  • star.hideturtle():将星星隐藏,因为它需要重新生成位置。
  • star.setx(ra.randint(width//2, width)):将星星的x坐标重置为屏幕右侧的随机位置,即让星星从右侧重新出现。
  • star.sety(ra.randint(-height//2, height//2)):将星星的y坐标重置为一个新的随机值,使得星星的纵向位置也发生变化。
  • star.showturtle():重新显示星星,使它再次出现在屏幕上。
  • 6. 主循环

    tu.mainloop()启动turtle的主事件循环,保持图形窗口的持续显示。所有的图形绘制和动画效果都会在这个循环中持续进行。

    7. 总结

    通过这段代码,作者创建了一个简单而有趣的星空动画效果。每颗星星具有不同的大小、速度和初始位置,并且随着时间的推移,它们会不断地从右侧进入、向左移动并离开屏幕,形成了一个动态的星空效果。通过使用turtle库的克隆功能,代码实现了星星的生成和移动,使得每颗星星都是独立的个体,可以自由地在屏幕上移动。整体代码结构简单清晰,使用了random模块来增加随机性,使得每次运行时,星空的效果都不同,增强了互动性和趣味性。

    写在后面

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

    作者:Want595

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python星空特效炫酷展示

    发表回复