猫史档案馆


【Python作品分享】turtle弹幕【求助帖】

用户:程序侯程序侯查看:18 回复:11 评论:18 创建时间:2020-05-25T11:50:14


【作品展示】

center_image

【作品介绍】

pen是一个放着许多画笔的字典。

为什么第24行代码有错?

【作品源代码】

l = []
num = 0
import turtle
while True:
    num += 1
    try:
        l.append(turtle.textinput('turtle弹幕(按“Canser”键即可退出编辑)', (('第' + str(num)) + '行字符串是:')) + '')
    except TypeError:
        break
speed = 0
while speed == 0:
    speed = turtle.numinput('turtle弹幕(不能为0)', '请设置弹幕速度')
pen = {}
serial = 0
def if_else(_if, _then, _else):
    if _if:
        return _then
    else:
        return _else
import time, random
def draw(number):
    global pen, speed, l
    text = random.choice(l)
    pen[number].pencolor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))#就是这出错了
    pen[number].hideturtle()
    pen[number].penup
    pen[number].goto(if_else(speed > 0, -1000, 1000), random.uniform(-800, 800))
    while if_else(speed > 0, pen[number].xcor() > 1000, pen[number].xcor < -1000):
        pen[number].clear()
        pen[number].setx(pen[number].xcor + speed)
        pen[number].pendown()
        pen[number].write(text, font=('宋体', 25, 'normal'))
        pen[number].penup()
import _thread
while True:
    pen[serial] = turtle.pen()
    _thread.start_new_thread(draw, (serial,))
    time.sleep(random.uniform(0, 3))


回复

上一页1 页 / 共 1下一页
程序侯程序侯

而且由于是多线程,它一直在报错!

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

啊这~

点赞0


评论


盒子的box盒子的box

pen={}

那pen就是一个dict,而dict没有pencolor!

点赞0


评论


三百克薄荷油三百克薄荷油

字典是无序的,不能用索引值

点赞0


评论


沉著的飞叶龙uZWJ沉著的飞叶龙uZWJ

我非常想解决这个问题,无奈我不会_thread库,没法帮忙

点赞0


评论


不起眼的账号不起眼的账号

导入错误:第34行没有名为'u thread的模块

点赞0


评论


三百克薄荷油三百克薄荷油

另外导入都会放在第一行,放在后面不符合pep8

点赞0


评论


少幽科技少幽科技

.Pen()创建对象

点赞0


评论


程序侯程序侯

@所有人

大家都没有仔细看源代码,有的看了却连图片上的报错都不看看,能细心点吗?

点赞0


评论


三百克薄荷油三百克薄荷油

字典“pen”没有“pencolor”这个命令!

点赞0


评论


沉著的飞叶龙uZWJ沉著的飞叶龙uZWJ

import turtle
import time#准备
class danmu():#创建弹幕类
    def __init__(self,text,pos=0,color='black',speed=5,size=20,font="微软雅黑",mode='normal'):#设置可调整的参数
        self.text=text#设置弹幕文字
        self.size=size#设置弹幕大小
        self.font=font#设置弹幕字体
        self.mode=mode#设置弹幕样式
        self.speed=speed#设置弹幕速度
        self.pen=turtle.Pen()#建立绘制弹幕的画笔
        self.pen.hideturtle()#隐藏画笔
        self.pen.pu()#画笔抬笔,不然弹幕过后会留下痕迹
        self.pen.goto(350,pos)#移动到发射坐标(go函数中没有再用到pos参数,不用全局实例化)
        self.pen.setheading(180)#从右往左,B站传统
        self.pen.speed(0)#满速度,避免不必要的停顿
        self.pen.color(color,color)#设置颜色(同pos,下面没用到)
    def go(self):
        for i in range(int(750/self.speed)):#一条弹幕走750格,用750÷速度控制发射速度
            self.pen.fd(self.speed)#完成一帧前进
            self.pen.write(self.text,font=(self.font,self.size,self.mode))#书写弹幕(按传入的字体、大小、样式)
            time.sleep(0.02)#短暂停顿
            self.pen.undo()#然后立即撤销,进入下一循环,前进一点点再书写、撤销
dms=[danmu('开幕雷击',pos=300,speed=15,color='#66ccff'),danmu('开幕雷击',pos=280,speed=15,color='#66ccff')
,danmu('开幕雷击',pos=260,speed=15,color='#66ccff'),danmu('开幕雷击',pos=240,speed=15,color='#66ccff')
,danmu('开幕雷击',pos=220,speed=15,color='#66ccff'),danmu('开幕雷击',pos=200,speed=15,color='#66ccff')]
for a in dms:
    a.go()
'''
turtle库是单线程的,也就是说弹幕只能一条一条发,各位用自己会的多线程库也来做一个呗,记得发评论区哦~
'''

送你的

点赞1


评论