六六の魔法世界

注册

技术分享 - 软件插件技术贴 - 2021年11月28日

Maya沙雕弹幕插件

原文为劲爆羊厂长书写的Maya弹幕脚本,本人只是仿写与增加gif位置。

#coding:gbk
#*******************************************
#作者: 我東
#mail:wodong526@dingtalk.com
#time:2021/11/28
#版本:V1.1
#******************************************

from PySide2.QtCore import Qt, QPoint, QParallelAnimationGroup, QEasingCurve, QPropertyAnimation
from PySide2.QtGui import QFont, QMovie
from PySide2.QtWidgets import QWidget, QHBoxLayout, QLabel, QApplication

gif_path = r''      #gif路径(包括gif本身)
text = u''          #弹幕内容

class barrageWindow(QWidget):
    def __init__(self):
        super(barrageWindow, self).__init__()
        self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint)#设置窗口为无边框窗口且在窗口最前方显示
        self.setAttribute(Qt.WA_TranslucentBackground, True)               #设置窗口属性为背景透明

        self.label_aim = QLabel(self)                                      #这个控件可以显示文本和图像、动画
        self.label_tex = QLabel(self)

        self.main_layout = QHBoxLayout(self)                               #生成横布局
        self.main_layout.addWidget(self.label_aim)
        self.main_layout.addWidget(self.label_tex)

        self.desktop = QApplication.instance().desktop()                   #类似获取所有显示器(有明白的大佬麻烦教教我^_^)

        self.setText(text)
        self.setAim(gif_path)

    def setText(self, tex):
        self.Font_obj = QFont(u"微软雅黑", 30)
        self.label_tex.setText(tex)
        self.label_tex.setFont(self.Font_obj)
        self.label_tex.setStyleSheet('color:rgb(255, 255, 0)')

    def setAim(self, aimPath):
        self.movie_obj = QMovie('{}'.format(aimPath))
        self.label_aim.setMovie(self.movie_obj)
        self.movie_obj.start()

    def initAim(self, start, end):
        prop_aim = QPropertyAnimation(self, 'pos')#设置动画
        prop_aim.setStartValue(start)
        prop_aim.setEndValue(end)

        prop_aim.setEasingCurve(QEasingCurve.OutInCubic)#加速度变化方式,其它方式参见https://doc.bccnsoft.com/docs/PyQt4/qeasingcurve.html#Type-enum

        prop_aim.setDuration(20000)                     #动画时长,单位:微秒

        self.aim_grp = QParallelAnimationGroup(self)    #生成一个动画组,可以加入其它控件
        self.aim_grp.addAnimation((prop_aim))           #将这个动画窗口放入动画组
        self.aim_grp.finished.connect(self.stop)        #将信号和槽链接
        self.aim_grp.start()                            #动画组开始动画

    def stop(self):
        self.aim_grp.stop()#动画组停止
        self.movie_obj.setFileName('')#设置一个空对象来释放之前的gif占用
        self.close()       #窗口关闭

    def run(self):
        super(barrageWindow, self).show()
        start_poistion = QPoint(self.desktop.screenGeometry().width(), 100)#弹幕发出的初始位置(所有显示桌面的宽像素, 从上向下第100个像素)
        end_poistion = QPoint(-500, 100)                                   #弹幕的结束位置
        self.move(start_poistion)                                          #移动窗口到初始位置
        self.initAim(start_poistion, end_poistion)

a = barrageWindow()
a.run()
    相关文件下载地址
    ©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!