首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于数字雨特效的学习

关于数字雨特效的学习

作者头像
崔笑颜
发布2020-07-21 17:45:51
7320
发布2020-07-21 17:45:51
举报

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

image.png
image.png

在特效雨制作开始之前,先载入需要的函数库

import pygame
import numpy as np
import random
# 构建显示框
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))
# 准备雨滴原料
texts = [font.render(str(i), True, (0, 255, 0)) for i in range(10)]
# 实现动画
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()

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

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

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

3.pygame.color()函数:在这个链接中描述的很详细 实现此数字雨特效的原理就是动画效果,核心函数是 winSur.blit() 效果如下

image.png
image.png

特效实验(用字符串)

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()

不过使用字符串效果还不是很好,会有重叠,影响视觉感受。

image.png
image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档