欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于数字雨特效的学习

程序员文章站 2022-07-10 21:10:35
数字雨特效在很多场景都得到应用,看起来非常具有科技感。因此,一次偶然的机会在CSDN中学习了如何制作特效雨,下面分享一下学习数字特效雨的收获,并在此基础上做了一些有趣的实验和创新(虽然效果不好hhh)用到的库有:pygame/numpy/random...

关于数字雨特效的学习

数字雨特效在很多场景都得到应用,看起来非常具有科技感。因此,一次偶然的机会在CSDN中学习了如何制作特效雨,下面分享一下学习数字特效雨的收获,并在此基础上做了一些有趣的实验和创新(虽然效果不好hhh)
用到的库有:pygame/numpy/random
下面先看一下制作特效雨的流程图
关于数字雨特效的学习
在特效雨制作开始之前,先载入需要的函数库

import pygame
import numpy as np
import random

1.构建显示框`

FONT_PX = 20
pygame.init()
winSur = pygame.display.set_mode((800, 1000))                             #构建显示框
font = pygame.font.SysFont('fangsong', 20)                                #字体
bg_suface = pygame.Surface((800, 1000), flags=pygame.SRCALPHA)            #界面设置
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 13))                                 #颜色设置
winSur.fill((0, 0, 0))

(代码后有备注)
在这一部分中,有3点需要注意:
1.pygame.display.setmode(width,height),初始化窗口,前一个参数是宽度,后一参数是高度

2.pygame.surface()函数中的flags参数有两种选择:HWSURFACE——将创建surface对象放于显存中;SRCALPHA——每个像素包含一个alpha通道(用于控制透明度)

3.pygame.color()函数:在这个链接中描述的很详细

2.准备雨滴原料

texts = [font.render(str(i), True, (0, 255, 0)) for i in range(10)]

这里我们使用的雨滴是1-9的数字(可以根据自己的喜好选择,可以是字母或者其他,基于博主的实验,字符串应该也是可以的)

## 3.实现动画

colums = int(800 / FONT_PX)                                               # 按窗口的宽度来计算可以在画板上放几列坐标并生成一个列表
drops = [0 for i in range(colums)]
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:                                     #退出窗口设定(关闭窗口按钮检测)
            exit()
    pygame.time.delay(33)
    winSur.blit(bg_suface, (0, 0))
    for i in range(len(drops)):
        text = random.choice(texts)
        winSur.blit(text, (i * FONT_PX, drops[i] * FONT_PX))               #surface.blit实现动画
        drops[i] += 1
        if drops[i] * 10 > 600 or random.random() > 0.95:                  #控制数字延申的屏幕长度
            drops[i] = 0
    pygame.display.flip()

实现此数字雨特效的原理就是动画效果,核心函数是 winSur.blit()
效果如下
关于数字雨特效的学习

4.特效实验(用字符串)

import pygame
import numpy as np
import random

PANEL_width = 400
PANEL_highly = 500
FONT_PX = 20
pygame.init()

winSur = pygame.display.set_mode((PANEL_width, PANEL_highly))
font = pygame.font.SysFont('123.ttf', 25)
bg_suface = pygame.Surface((PANEL_width, PANEL_highly), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 28))
winSur.fill((0, 0, 0))
letter = ['I','love','you']
texts = [
    font.render(str(letter[i]), True, (0, 255, 0)) for i in range(3)
]

column = int(PANEL_width / FONT_PX)
drops = [0 for i in range(column)]
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        elif event.type == pygame.KEYDOWN:
            chang = pygame.key.get_pressed()
            if (chang[32]):
                exit()
    pygame.time.delay(90)
    winSur.blit(bg_suface, (0, 0))
    for i in range(len(drops)):
        text = random.choice(texts)
        winSur.blit(text, (i * FONT_PX, drops[i] * FONT_PX))
        drops[i] += 1
        if drops[i] * 10 > PANEL_highly or random.random() > 0.95:
            drops[i] = 0
    pygame.display.flip()

不过使用字符串效果还不是很好,会有重叠,影响视觉感受。
关于数字雨特效的学习

本文地址:https://blog.csdn.net/weixin_46438055/article/details/107429587

相关标签: python