如何基于Python pygame實(shí)現(xiàn)動(dòng)畫(huà)跑馬燈
前言
大家都看過(guò)彩帶飄落吧?這個(gè)在比較喜慶的場(chǎng)合是很常見(jiàn)的:

還有“跑馬燈”效果,聽(tīng)起來(lái)很陌生,其實(shí)很常見(jiàn),下面的就是:

好了,相信大家都有了初步的認(rèn)識(shí)。當(dāng)然,如果有做前端或者搞設(shè)計(jì)的同學(xué),上面的效果應(yīng)該不難實(shí)現(xiàn),那如果想通過(guò)Python呢?有沒(méi)有包可以調(diào)用呢?
答案是有的——pygame
這個(gè)包適合用來(lái)開(kāi)發(fā)游戲,今天就不打算給大家詳細(xì)介紹了,還是想給大伙兒放松放松,以后有機(jī)會(huì)再多寫(xiě)寫(xiě)它。
不多說(shuō),直接甩出代碼:
import pygame
from random import randint, choice
screen_length = 700
screen_width = 500
# 模擬彩帶飄落的類(lèi),掉落的詞作為彩帶
class Word_drop(pygame.sprite.Sprite):
# 設(shè)置屬性:包括字體、下落速度、彩帶來(lái)源、彩帶框的屬性
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()
# 實(shí)現(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 = " 中國(guó)"
text1 = a.render(word1, True, (255, 0, 0), (0, 0, 0))
word2 = "我超級(jí)愛(ài)你"
text2 = a.render(word2, True, (255, 0, 0), (0, 0, 0))
# "跑馬場(chǎng)"字體框的屬性
_, _, 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)
# "跑馬場(chǎng)"
word_translate(jx1, ztw1, ztw2, screen_length, text1)
word_translate(jx2, ztw1, ztw2, screen_length, text2)
pygame.display.update()
好了,來(lái)看看效果:

還不錯(cuò)吧,有沒(méi)有感覺(jué)好玩呢?
當(dāng)然,如果需要,代碼直接拿去用,根據(jù)自己的想法去改就行!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何用Python做一個(gè)微信機(jī)器人自動(dòng)拉群
這篇文章主要介紹了如何用Python做一個(gè)微信機(jī)器人自動(dòng)拉群,微當(dāng)群人數(shù)達(dá)到100人后,用戶無(wú)法再通過(guò)掃描群二維碼加入,只能讓用戶先添加群內(nèi)聯(lián)系人微信,再由聯(lián)系人把用戶拉進(jìn)來(lái)。這樣,聯(lián)系人員的私人微信會(huì)添加大量陌生人,給其帶來(lái)不必要的打擾,需要的朋友可以參考下2019-07-07
Python如何實(shí)現(xiàn)自帶HTTP文件傳輸服務(wù)
這篇文章主要介紹了Python如何實(shí)現(xiàn)自帶HTTP文件傳輸服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
pandas.loc 選取指定列進(jìn)行操作的實(shí)例
今天小編就為大家分享一篇pandas.loc 選取指定列進(jìn)行操作的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程
這篇文章主要介紹了yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
解決Tensorflow安裝成功,但在導(dǎo)入時(shí)報(bào)錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決Tensorflow安裝成功,但在導(dǎo)入時(shí)報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python使用PyYAML庫(kù)讀寫(xiě)yaml文件的方法
這篇文章主要介紹了Python使用PyYAML庫(kù)讀寫(xiě)yaml文件的方法,包括YAML基本概念介紹及YAML語(yǔ)法知識(shí),結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
使用Python實(shí)現(xiàn)快速搭建本地HTTP服務(wù)器
這篇文章主要介紹了如何使用Python快速搭建本地HTTP服務(wù)器,輕松實(shí)現(xiàn)一鍵 HTTP 文件共享,同時(shí)結(jié)合二維碼技術(shù),讓訪問(wèn)更簡(jiǎn)單,感興趣的小伙伴可以了解下2025-04-04
python 監(jiān)聽(tīng)salt job狀態(tài),并任務(wù)數(shù)據(jù)推送到redis中的方法
今天小編就為大家分享一篇python 監(jiān)聽(tīng)salt job狀態(tài),并任務(wù)數(shù)據(jù)推送到redis中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Django中數(shù)據(jù)庫(kù)遷移常用的命令小結(jié)
在Django中數(shù)據(jù)庫(kù)遷移用于保持?jǐn)?shù)據(jù)庫(kù)結(jié)構(gòu)與模型定義同步,這篇文章主要介紹了Django中數(shù)據(jù)庫(kù)遷移常用的命令,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03

