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模拟3D星空动画的完整代码。
技术需求
-
Python
turtle
库:turtle
库用于在屏幕上绘制图形和实现动画。通过Turtle
对象,可以控制形状、位置、颜色等属性,并进行动态更新。- 主要功能包括创建图形、设置画笔和填充颜色、控制速度与位置,以及隐藏和显示图形。
-
Python
random
库:random
库用于生成随机数,此处用于随机生成星星的位置、大小和移动速度,增加动画的多样性和不可预测性。- 例如,使用
random.uniform(0, 1)
生成0到1之间的浮点数以控制星星大小;使用random.randint()
生成随机整数确定星星的初始位置和速度。
-
Turtle
对象的克隆:- 使用
turtle.clone()
方法克隆turtle
对象,使每颗星星拥有独立的位置、速度和大小属性。每颗星星作为turtle
对象的副本,可独立移动和变化。
- 使用
-
循环控制:
- 通过
while True:
无限循环和for
循环不断更新星星位置,保持动画持续运行。 - 不断更新星星位置以创建动态效果,当星星移出屏幕时,通过隐藏、重置位置并显示实现“循环出现”效果。
- 通过
-
事件驱动模型:
turtle.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
此行导入了turtle
和random
模块,分别用于图形绘制和随机数生成。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
:定义绘图窗口尺寸为800x600像素。tu.setup(width, height)
:设置窗口尺寸。tu.title("3D星空")
:设置窗口标题。tu.bgcolor("black")
:设置背景色为黑色,营造星空氛围。tu.delay(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
对象。t.pencolor("white")
和t.fillcolor("white")
:设置画笔和填充颜色为白色。t.penup()
:提升画笔,避免移动时留下痕迹。
4. 创建星星
这部分生成99颗星星,每颗通过克隆t
对象创建:
stars = []
:初始化空列表存储星星对象。for i in range(99):
:循环生成99颗星星。star = t.clone()
:克隆t
对象生成新星星。s = ra.uniform(0, 1) / 3
:生成随机大小比例。star.shapesize(s, s)
:设置星星大小。star.speed(ra.randint(2, 5))
:设置随机移动速度。star.setx(ra.randint(width//2, width))
和star.sety(ra.randint(-height//2, height//2))
:设置随机初始位置。star.showturtle()
:显示星星。stars.append(star)
:将星星添加到列表中。
5. 星星的运动与循环
实现星星不断移动及重置功能:
while True:
:无限循环保证持续运动。for star in stars:
:遍历所有星星进行移动。star.setx(star.xcor() - star.speed())
:使星星向左移动。if star.xcor() < -width//2:
:判断星星是否移出屏幕左侧。star.hideturtle()
:隐藏离开屏幕的星星。star.setx(ra.randint(width//2, width))
和star.sety(ra.randint(-height//2, height//2))
:重置星星位置。star.showturtle()
:重新显示星星。
6. 主循环
tu.mainloop()
启动turtle
主事件循环,保持窗口持续显示。
7. 总结
该代码通过turtle
库实现了简单而有趣的星空动画,每颗星星具有随机的大小、速度和初始位置,形成动态效果。使用turtle
的克隆功能和random
模块增加了随机性和趣味性,整体结构清晰,易于理解。
写在后面
我是一只有趣的兔子,感谢你的喜欢!