如何基于Python pygame实现动画跑马灯


Posted in Python onNovember 18, 2020

前言

大家都看过彩带飘落吧?这个在比较喜庆的场合是很常见的:

如何基于Python pygame实现动画跑马灯

还有“跑马灯”效果,听起来很陌生,其实很常见,下面的就是:

如何基于Python pygame实现动画跑马灯

好了,相信大家都有了初步的认识。当然,如果有做前端或者搞设计的同学,上面的效果应该不难实现,那如果想通过Python呢?有没有包可以调用呢?

答案是有的——pygame

这个包适合用来开发游戏,今天就不打算给大家详细介绍了,还是想给大伙儿放松放松,以后有机会再多写写它。

不多说,直接甩出代码:

import pygame
from random import randint, choice

screen_length = 700
screen_width = 500
# 模拟彩带飘落的类,掉落的词作为彩带
class Word_drop(pygame.sprite.Sprite):

  # 设置属性:包括字体、下落速度、彩带来源、彩带框的属性
  def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    self.font = pygame.font.SysFont(name='幼圆', size=10, bold=True, italic=True)
    self.speed = randint(15, 30)
    self.word = self.getWord()
    self.image = self.font.render(self.word, True,
                   (randint(0, 255), randint(0, 255), randint(0, 255)))
    self.image = pygame.transform.rotate(self.image, randint(87, 93))
    self.rect = self.image.get_rect()
    self.rect.topleft = (randint(0, screen_length), -20)

  # 获取掉落的词
  def getWord(self):
    length = randint(1, 8)
    word = ''
    for i in range(length):
      word += choice('qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM')
    return word

  # 设置彩带更新的条件
  def update(self, *args):
    self.rect = self.rect.move(0, self.speed)
    if self.rect.top > screen_length:
      self.kill()

# 实现"跑马灯"效果的函数
def word_translate(jx, ztw1, ztw2, screen_length, text):
  max_ztw = max(ztw1, ztw2)
  jx.x -= 5
  if jx.x < 0 - max_ztw:
    jx.x = (screen_length + 10)
  screen.blit(text, [jx.x, jx.y])

if __name__ == '__main__':

  # 初始化工作
  pygame.init()
  pygame.font.init()

  # 渲染字体,两行字
  a = pygame.font.SysFont(name='幼圆', size=50, bold=True, italic=True)

  word1 = "  中国"
  text1 = a.render(word1, True, (255, 0, 0), (0, 0, 0))

  word2 = "我超级爱你"
  text2 = a.render(word2, True, (255, 0, 0), (0, 0, 0))

  # "跑马场"字体框的属性
  _, _, ztw1, zth1 = text1.get_rect()
  jx1 = pygame.Rect(screen_length, (screen_width / 2 - zth1), ztw1, zth1)

  _, _, ztw2, zth2 = text2.get_rect()
  jx2 = pygame.Rect(screen_length, (screen_width / 2), ztw2, zth2)

  # 其他相关设置
  screen = pygame.display.set_mode((screen_length, screen_width))
  clock = pygame.time.Clock()
  wordGroup = pygame.sprite.Group()

  while True:

    clock.tick(30)
    screen.fill((0, 0, 0))

    # 设置退出的条件
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
        pygame.quit()
        exit(0)

    # 彩带飘落
    word_object = Word_drop()
    wordGroup.add(word_object)
    wordGroup.update()
    wordGroup.draw(screen)

    # "跑马场"
    word_translate(jx1, ztw1, ztw2, screen_length, text1)
    word_translate(jx2, ztw1, ztw2, screen_length, text2)

    pygame.display.update()

好了,来看看效果:

如何基于Python pygame实现动画跑马灯

还不错吧,有没有感觉好玩呢?

当然,如果需要,代码直接拿去用,根据自己的想法去改就行!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python刷投票的脚本实现代码
Nov 08 Python
python字符类型的一些方法小结
May 16 Python
python实现发送邮件及附件功能
Mar 02 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
python实现点对点聊天程序
Jul 28 Python
python中scikit-learn机器代码实例
Aug 05 Python
Django中使用Celery的方法示例
Nov 29 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
简单了解django orm中介模型
Jul 30 Python
Django Form常用功能及代码示例
Oct 13 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 #Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 #Python
Python urllib3软件包的使用说明
Nov 18 #Python
Python从文件中读取数据的方法步骤
Nov 18 #Python
详解Python中如何将数据存储为json格式的文件
Nov 18 #Python
python3中calendar返回某一时间点实例讲解
Nov 18 #Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 #Python
You might like
如何获得PHP相关资料
2006/10/09 PHP
php session 错误
2009/05/21 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
php字符串分割函数用法实例
2015/03/17 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
HTML5实现签到 功能
2018/10/09 HTML / CSS
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
优秀员工年终发言演讲稿
2014/01/01 职场文书
保密协议书范本
2014/04/22 职场文书
市场调查策划方案
2014/06/10 职场文书
军训拉歌口号
2014/06/13 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
会计专业求职信
2014/08/10 职场文书
英语课外活动总结
2014/08/27 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2014年底工作总结
2014/12/15 职场文书
物业保安辞职信
2015/05/12 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫