如何基于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代码做configure文件
Jul 20 Python
python中尾递归用法实例详解
Apr 28 Python
Python中sort和sorted函数代码解析
Jan 25 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
Cython编译python为so 代码加密示例
Dec 23 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
简单了解python列表和元组的区别
May 14 Python
python如何求100以内的素数
May 27 Python
python爬虫容易学吗
Jun 02 Python
Django多个app urls配置代码实例
Nov 26 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 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
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
Javascript读取cookie函数代码
2010/10/16 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
Javascript实现单例模式
2016/01/24 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
Django中的文件的上传的几种方式
2018/07/23 Python
详解python中sort排序使用
2019/03/23 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
python爬虫 正则表达式解析
2019/09/28 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Pytorch之Variable的用法
2019/12/31 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
三星英国官网:Samsung英国
2018/09/25 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
九年级物理教学反思
2014/01/29 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android