如何基于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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
Python本地与全局命名空间用法实例
Jun 16 Python
利用python写个下载teahour音频的小脚本
May 08 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
Python读取stdin方法实例
May 24 Python
python文字转语音实现过程解析
Nov 12 Python
python绘制彩虹图
Dec 16 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
对python中arange()和linspace()的区别说明
May 03 Python
Python Pivot table透视表使用方法解析
Sep 11 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
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
php缓冲输出实例分析
2015/01/05 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
很可爱的输入框
2008/08/03 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
Javascript面向对象之四 继承
2011/02/08 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
银行员工职业规划范文
2014/01/21 职场文书
安全承诺书格式
2014/05/21 职场文书
党员年度个人总结
2015/02/14 职场文书
超市收银员岗位职责
2015/04/07 职场文书
二审答辩状格式
2015/05/22 职场文书
红色经典电影观后感
2015/06/18 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书