如何基于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读写Excel文件方法介绍
Nov 22 Python
Python交互环境下实现输入代码
Jun 22 Python
python 列表降维的实例讲解
Jun 28 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
Python装饰器用法实例分析
Jan 14 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
python 内置函数汇总详解
Sep 16 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
numpy实现RNN原理实现
Mar 02 Python
Python学习之时间包使用教程详解
Mar 21 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 访问数据库配置通用方法(json)
2018/05/20 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python检查指定文件是否存在的方法
2015/07/06 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
python爬取个性签名的方法
2018/06/17 Python
python构建基础的爬虫教学
2018/12/23 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
文员个人的求职信范文
2013/09/26 职场文书
七匹狼男装广告词
2014/03/21 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
先进党支部申报材料
2014/12/24 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
python析构函数用法及注意事项
2021/06/22 Python
Nginx的基本概念和原理
2022/03/21 Servers
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL