银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

tmyb

今天跟大家唠唠我最近搞的“银河铁道”项目,纯属个人瞎折腾,各位大佬轻喷。

事情是这样的,前段时间不是老想着给自己找点乐子嘛正好瞅见个星空主题的图片,一下子就来了灵感。心想,能不能自己也搞一个,那种在星空下穿梭的感觉,想想就带劲。

说干就干!我先是上网各种搜资料,看了不少大佬的教程,什么Processing、OpenGL之类的,看得我头都大了。后来琢磨着,咱也不是专业的,没必要搞那么复杂,能做出个大概意思就行。

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

我决定用Python!简单粗暴,上手快。

我得有个“银河”。这个简单,用pygame 搞个窗口,然后随机生成一堆白色的点,模拟星星。点越多越密集,银河味儿就越浓。一开始点太少,稀稀拉拉的,后来加到几千个,感觉才像那么回事儿。

python

import pygame

import random

# 初始化pygame

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

# 窗口大小

size = [640, 480]

screen = *_mode(size)

# 颜色

WHITE = (255, 255, 255)

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

BLACK = (0, 0, 0)

# 星星列表

stars = []

for i in range(1000):

x = *(0, size[0])

y = *(0, size[1])

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

*([x, y])

有了星星,还得有个“铁道”。这个稍微麻烦点,我打算用线条来模拟铁轨,让它在星空中延伸。为了做出那种透视的效果,远处的线条要细,近处的线条要粗。

这部分代码折腾了我好久,主要是数学不太透视关系有点懵。还是硬着头皮,一点点调参数,总算弄出来个大概。

python

# 绘制铁轨

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

for i in range(20):

width = 10 - i 0.5 # 铁轨宽度,远处变细

y = size[1] - i 20 # 铁轨高度,向上延伸

*(screen, WHITE, (size[0]/2 - 50 - i 5, y), (size[0]/2 + 50 + i 5, y), int(width))

就是让这个“铁道”动起来。就是让星星和铁轨的位置不断变化,造成一种向前移动的错觉。这个简单,在主循环里,每次都更新星星和铁轨的坐标就行。

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

python

# 主循环

done = False

while not done:

for event in *():

if * == *:

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

done = True

# 清屏

*(BLACK)

# 更新星星位置

for star in stars:

star[1] += 1

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

if star[1] > size[1]:

star[1] = 0

star[0] = *(0, size[0])

*(screen, WHITE, (star[0], star[1]), 2)

# 绘制铁轨 (代码同上)

# 刷新屏幕

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

到这里,一个简陋的“银河铁道”就基本完成了。虽然效果比较粗糙,但好歹也算是个雏形了。

不过看着光秃秃的铁道,总觉得少了点什么。对了,还缺个“火车头”!

于是我又找了个简单的火车头图片,用 *() 加载进来,然后把它放在铁道的末端。为了让火车头也有动感,我还加了个简单的左右摇摆效果。

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

为了增加点气氛,我还加了点背景音乐。找了个比较舒缓的电子音乐,循环播放,感觉一下子就上来了。

整个项目断断续续搞了好几天,遇到不少坑,但也学到不少东西。虽然最终效果和想象中的差距很大,但自己动手做出来的,还是挺有成就感的。

核心就是用pygame 绘制星星和铁轨,然后通过不断更新坐标,实现动画效果。

透视关系的处理比较麻烦,需要耐心调整参数。

加点图片和音乐,可以提升整体效果。

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点

这个项目还有很多可以改进的地方,比如:

增加更多的细节,让星星和铁轨更加逼真。

加入更多的互动元素,比如可以控制火车头的速度。

优化代码结构,提高运行效率。

这回“银河铁道”之旅,虽然有点累,但也挺有趣的。以后有机会,再继续完善它。

希望我的分享对大家有所帮助,也欢迎各位大佬多多指教!

银河铁道沿途景点:盘点那些不容错过的美丽星球和特色站点