如何基于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应用03 使用PyQT制作视频播放器实例
Dec 07 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
python将list转为matrix的方法
Dec 12 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
Python3 max()函数基础用法
Feb 19 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
Python 正则模块详情
Nov 02 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中使用Oracle数据库(6)
2006/10/09 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
10个简化PHP开发的工具
2014/12/25 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
splice slice区别
2006/10/09 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
vue接口请求加密实例
2020/08/11 Javascript
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
python中dir函数用法分析
2015/04/17 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
浅谈Python type的使用
2019/11/19 Python
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
授权委托书怎么写
2014/04/03 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
房屋产权证明书
2015/06/19 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
导游词之河北邯郸
2019/09/12 职场文书