如何基于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实现简单多线程任务队列
Feb 27 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
Python使用filetype精确判断文件类型
Jul 02 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
Python骚操作之动态定义函数
Mar 26 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
Pytorch转onnx、torchscript方式
May 25 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
Python anaconda安装库命令详解
Oct 16 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之Smarty入门
2007/01/04 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
深入理解Python变量与常量
2016/06/02 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
wxPython实现分隔窗口
2019/11/19 Python
浅谈python出错时traceback的解读
2020/07/15 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
物理研修随笔感言
2014/02/14 职场文书
教师节寄语2015
2015/03/23 职场文书
酒店开业主持词
2015/07/02 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript