如何基于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字符串替换示例
Apr 24 Python
使用Python的Twisted框架编写简单的网络客户端
Apr 16 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
利用Python计算KS的实例详解
Mar 03 Python
如何让python的运行速度得到提升
Jul 08 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
django中cookiecutter的使用教程
Dec 03 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
PyTorch 如何自动计算梯度
May 23 Python
python多线程方法详解
Jan 18 Python
LeetCode189轮转数组python示例
Aug 05 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获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
laravel入门知识点整理
2020/09/15 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
pycharm安装和首次使用教程
2018/08/27 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
Pygame框架实现飞机大战
2020/08/07 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
服装机修工岗位职责
2013/12/26 职场文书
大学生实习证明范本
2014/01/15 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
终止合同协议书
2014/04/17 职场文书
2014年生产部工作总结
2014/12/17 职场文书
大学生操行评语大全
2014/12/31 职场文书
了解Redis常见应用场景
2021/06/23 Redis