如何基于Python pygame實現(xiàn)動畫跑馬燈
前言
大家都看過彩帶飄落吧?這個在比較喜慶的場合是很常見的:

還有“跑馬燈”效果,聽起來很陌生,其實很常見,下面的就是:

好了,相信大家都有了初步的認識。當(dāng)然,如果有做前端或者搞設(shè)計的同學(xué),上面的效果應(yīng)該不難實現(xiàn),那如果想通過Python呢?有沒有包可以調(diào)用呢?
答案是有的——pygame
這個包適合用來開發(fā)游戲,今天就不打算給大家詳細介紹了,還是想給大伙兒放松放松,以后有機會再多寫寫它。
不多說,直接甩出代碼:
import pygame
from random import randint, choice
screen_length = 700
screen_width = 500
# 模擬彩帶飄落的類,掉落的詞作為彩帶
class Word_drop(pygame.sprite.Sprite):
# 設(shè)置屬性:包括字體、下落速度、彩帶來源、彩帶框的屬性
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
# 設(shè)置彩帶更新的條件
def update(self, *args):
self.rect = self.rect.move(0, self.speed)
if self.rect.top > screen_length:
self.kill()
# 實現(xiàn)"跑馬燈"效果的函數(shù)
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)
# 其他相關(guān)設(shè)置
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))
# 設(shè)置退出的條件
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()
好了,來看看效果:

還不錯吧,有沒有感覺好玩呢?
當(dāng)然,如果需要,代碼直接拿去用,根據(jù)自己的想法去改就行!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何實現(xiàn)自帶HTTP文件傳輸服務(wù)
這篇文章主要介紹了Python如何實現(xiàn)自帶HTTP文件傳輸服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
yolov5 win10 CPU與GPU環(huán)境搭建過程
這篇文章主要介紹了yolov5 win10 CPU與GPU環(huán)境搭建過程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
解決Tensorflow安裝成功,但在導(dǎo)入時報錯的問題
今天小編就為大家分享一篇解決Tensorflow安裝成功,但在導(dǎo)入時報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
使用Python實現(xiàn)快速搭建本地HTTP服務(wù)器
這篇文章主要介紹了如何使用Python快速搭建本地HTTP服務(wù)器,輕松實現(xiàn)一鍵 HTTP 文件共享,同時結(jié)合二維碼技術(shù),讓訪問更簡單,感興趣的小伙伴可以了解下2025-04-04
python 監(jiān)聽salt job狀態(tài),并任務(wù)數(shù)據(jù)推送到redis中的方法
今天小編就為大家分享一篇python 監(jiān)聽salt job狀態(tài),并任務(wù)數(shù)據(jù)推送到redis中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Django中數(shù)據(jù)庫遷移常用的命令小結(jié)
在Django中數(shù)據(jù)庫遷移用于保持數(shù)據(jù)庫結(jié)構(gòu)與模型定義同步,這篇文章主要介紹了Django中數(shù)據(jù)庫遷移常用的命令,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-03-03

