【原神,启动!】Python-pygame实现原神启动界面

 

目录

前言

video模块(已失效)

导入图片

阿尔法(alpha)通道

播放BGM

同步播放


【原神,启动!】Python-pygame实现原神启动界面_第1张图片

前言

这是一次0基础萌新的尝试    (。・ω・)ノ゙

之前一直在学C++,但是这台电脑貌似主打一个油盐不进,Java,C++之类的语言搭建环境一直不成功,只有Python勉强能用,所以目前实践环节……只能留给Python了( ̄~ ̄;)

让程序在窗口内产生简单的动画效果,似乎比什么输密码之类的有意思多了?

video模块(已失效)

(代码块已略去import及初始化过程)

video功能是我想到的第一种比较直接的一种方法,毕竟直接拿原视频糊弄人...也不是不行?

screen = pygame.display.set_mode((640, 480))# 创建Pygame显示窗口
video = pygame.movie.Movie("video.mp4")#  加载文件
video.play()# 播放视频

while video.get_busy(): # 等待视频播放结束
    for event in pygame.event.get():    # 处理Pygame事件
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    screen.blit(video.get_surface(), (0, 0))    # 将视频帧绘制到屏幕上
    pygame.display.flip()
 

但是video在Python3貌似已经被移除了,所以...看到“Movie”黄色高亮 的时候已经感觉大事不妙了

导入图片

文字动画效果在特殊字体缺失时,观赏性不能说大幅下降,至少也是不堪入目......(*/ω\*)

所以决定直接用图片渐变显示来达到效果

先拿张图 ↓(水印是系统加的,删不掉了)

【原神,启动!】Python-pygame实现原神启动界面_第2张图片

import pygame
pygame.init()  # 初始化
window = pygame.display.set_mode((1080, 640))  # 创建自定义大小的窗口(1080*640)
pygame.display.set_caption('Genshin Impact') # 设定了一个标题
window.fill((255, 255, 255)) # 窗口背景颜色,注意是RGB格式(此处为白)

在显示图片前,应先初始化pygame并构建窗口 ,然后导入图片;

image1 = pygame.image.load('Files/SPLASH.jpg') # 加载图片
window.blit(image1, (0, 0)) # 进行渲染
pygame.display.flip() # 顺带着刷新一下

图片导入成功,不代表就能直接显示,需要使用window.blit()来对图片进行渲染,括号内格式为(渲染对象, (横坐标,纵坐标)),横纵坐标相对左上角而言,左上角为(0,0)

display.flip()仅限于第一次使用,如果是后续刷新,把flip换为update即可

w, h = image1.get_size()# 定义了w,h作为宽,高;

定义了w,h作为宽,高;在涉及坐标的计算中,也可以直接使用已定义的宽高。

(如:1280-w,720-h)

阿尔法(alpha)通道

set_alpha可用于调节图片透明度,用下方的for循环可达到图片渐变效果,最终实现图片淡入

for a in range(1000):
    clock.tick(30)
    window.fill((255, 255, 255))
    if v == 50:
        picture.set_alpha(a*2)
    else:
        picture.set_alpha(255-a*10)

播放BGM

某两字游戏的标题会在音乐达到某小节高潮时展示标题,因此我们应该使其保持同步,但当务之急是先让音乐能够正常播放

pygame.mixer.pre_init() # 初始化
pygame.mixer.music.load('Files/启动背景音乐.mp3') # 导入
pygame.mixer.music.play(-1) # 单曲循环

pygame.mixer.music.play(),括号内填写的是在播放完一次后,进行重复播放次数

如果是 -1,则为单曲循环

同步播放

pygame.time.delay()可设置在延迟一定时间(以毫秒计)后执行下一步。

这里的音频文件在第47秒才会迎来高潮,所以delay的时间应为47000ms,即47s。

clock = pygame.time.Clock()

time_passed = clock.tick(6000)
pygame.time.delay(47000)

效果展示

(其实就是最开始的动图)

你可能感兴趣的:(Python,实践,python,pygame,开发语言)