提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这一段主要实现弹幕的基本原理,他和“箭矢不动”这个小典故有些许渊源。箭矢不动的思想主要是:在飞箭运动时,他在某一瞬间必定处在空间上的某一点。飞箭既然在路径的每一点上都是静止的,所以飞着的箭实际上并没有运动。虽然“箭矢不动”思想在物理界能够被证明是错误的,但是我们可以反推这个悖论来骗一下眼睛-把静态图片连续播放,每次播放的位置都不重叠且具有方向性,欸!你看,他好像动起来了!我们把这里的每张图片成为一帧,帧数越大,动图就越细腻,也就越逼真。该程序就是这个设计原理。
1.弹幕原理代码
import turtle
pen=turtle.Pen()
pen.speed(0)
pen.penup()
pen.goto(-400,0)
content=input("请输入数据,并用逗号隔开句子:").split(",")
speed_=turtle.numinput("请输入数据移动速度:",10)
for j in range(len(content)):
for i in range(int(800/speed_)):
pen.write(content[j],font=("arial",20))
pen.fd(speed_)
pen.clear()
pen.goto(-400,0)
turtle.done()
2.代码讲解
2.1.用户输入
在弹幕程序中,首先pen.penup()抬笔,然后海龟画笔去到(-400,0)这个坐标(屏幕的最左边,也就是弹幕的起始位置)。content是输入,用split()函数以逗号为标志位,把用户输入分隔成一个列表。这样做为的是防止有比屏幕还长的弹幕一次性这么飘过去(不美观且速度过快)。speed_询问的是content弹幕的移动速度。
2.2.弹幕设计
接下来就是让弹幕的动起来的设计,我们可以看到里有两层嵌套循环,每一个内层循环都负责让弹幕中的一个被逗号分隔开的短语动起来并从屏幕最左边移动到最右边。有多少个短语,外层循环就执行多少次,而内层循环的次数是800/speed_次。在这里800是屏幕的宽,speed_是一次静态图片移动的距离。
然后是用write()函数将内容写在海龟画布上,第二个参数是字体大小和样式。pen.clear()就是把图片擦掉,不然的话效果就不是移动了,而是重影。每次内层循环完都把海龟画笔位置重新设到起始位置(-400,0),即屏幕的最左边。了解完原理,我们运行一下试试看吧!
总结
这只是弹幕的基本原理,以后随着学习的深入,弹幕的效果会更好,也有更多实现弹幕的方法和弹幕的应用。那代码也会越来越长,会用到其他库去辅助实现这些效果,海龟库以后可能用的频率就会比较少了。