动画效果制作——基础篇
本节文档介绍如何制作动画效果,本节会使用基础方法来做,比较简单
参考资料:https://www.renpy.cn/thread-242-1-1.html
官方文档:https://www.renpy.cn/doc/displaying_images.html#image-statement
# 前置知识
Excel 基础技能,PS抠图,Ren'Py 不大需要前置知识
# 需求描述
很多 Galgame 都会有一些动画,比如本作的 “CALL” 动画,还有真冬、心爱的介绍小动画
针对像真冬、心爱的介绍小动画这样作用范围在全屏幕的,推荐做成视频,用类似 $ renpy.movie_cutscene("video/真冬カットイン.webm",stop_music=False)
这样的方式引入
而动画范围仅在局部的,或者反复播放的,我们就需要做成动画了
这里我们使用最简单的办法,需要特别注意
这个方法仅适用于300张以内图片的情况,推荐不要超过100张,否则会非常卡
简单介绍一下手头的素材情况,本作原作的动画是由加密的 jpg 图片构成,我们需要首先把 jpg 抠图成透明的 png 或者 webp 图像,以 scene01 中的 “CALL” 动画为例,是由 60 张静止图片快速播放组成的一个动画
# 实现
建议在 Scene 脚本外写以下代码,这样更加清晰
# 参考 ver1.0 scrpit.rpy 815-989 行
#######################################################################################
# 定义callgif 即来电时的gif 屏幕中间一横线写 CALL
image callgif: # 这个画面的名字叫 callgif
"images/pac/call/call00000.png" # 播放的图片名称
pause 0.0166666666666667 # 每张画面的暂停时间,单位是秒,因为移植版要把动画做到 60 帧,所以对素材扩分辨率补帧之后每张图片的展示时间是 0.0166667 秒(6无限循环)
"images/pac/call/call00001.png"
pause 0.0166666666666667
"images/pac/call/call00002.png"
pause 0.0166666666666667
"images/pac/call/call00003.png"
pause 0.0166666666666667
# ………………………… 中间代码省略
"images/pac/call/call00057.png"
pause 0.0166666666666667
"images/pac/call/call00058.png"
pause 0.0166666666666667
"images/pac/call/call00059.png"
pause 0.0166666666666667
repeat # 重复播放加 repeat ,否则不加
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
这样我们就准备好了这个动画,在 scene 脚本内,我们要展示这个动画的时候,只需要一句话就好
# 参考 ver1.0 scene01.rpy 4480 行
show screen callscr
2
其实这样是给定义成了一个screen
,screen
的用法和 image
类似,展示 show ,隐藏 hide ,所以隐藏动画的写法自然是
# 参考 ver1.0 scene01.rpy 4494 行
hide screen callscr
2
# 技巧
有没有发现,image callgif:
这里特别麻烦,有多少张图片语句行数就要 x2 ,写起来特别费时间
为了快速生成这样的代码,我们需要使用 Excel(我用的 MS Office Excel,与 WPS Excel 兼容性未知)
为了方便大家使用,这个xlsx 文件
在 1.0 版本中已经一起打包进去了,你可以通过解包后在 pac 动画文件夹获取,如:images\pac\LETSROCK\letsrock.xlsx
这个 Excel 文件分了三个 Sheet ,分别是“初步整理”,“再次整理”,“结果”,填写好这三个 Sheet 就能自动生成 image 定义代码
在“初步整理”中,你需要
- 在 A 列输入动画文件的
"
(英文引号)+相对位置(输入两个然后下拉自动填充即可) - 在 B 列中输入图片名称(输入两个然后下拉自动填充即可)+
"
(英文引号) - D 列会自动生成,不用管(如果自动生成那边行数不够就使用下拉自动填充,多了就删掉,与 A 列长度保持一致)
- 在 I 列输入
pause 时间(单位是秒)
- L 列会自动生成,不用管(如果自动生成那边行数不够就使用下拉自动填充,多了就删掉,与 D 列长度保持一致)
这样“初步整理”这个表就填好了
“初步整理”表格内容参考:
A 列 | B 列 | D 列 | I 列 | L 列 | |
---|---|---|---|---|---|
"images/pac/LETSROCK/ | 00000004.jpg" | "images/pac/LETSROCK/00000004.jpg" | pause 0.0166666666666667 | pause 0.0166666666666667 | |
"images/pac/LETSROCK/ | 00000005.jpg" | "images/pac/LETSROCK/00000005.jpg" | pause 0.0166666666666667 | pause 0.0166666666666667 | |
"images/pac/LETSROCK/ | 00000006.jpg" | "images/pac/LETSROCK/00000006.jpg" | pause 0.0166666666666667 | pause 0.0166666666666667 |
接下来把刚刚自动生成的 D 列和 L 列以文本形式分别复制到“再次整理”这个 Sheet 中的 A 列和 B 列
接下来:
- 先复制 A 列到 F 列
- 再复制 B 列到 F 列中,从刚刚复制 A 列内容的结尾接上
- 在 J 列图片部分写上递增的奇数(从 1 开始,善用下拉自动填充)
- 在 J 列
pause
部分写上递增的偶(从 2 开始,善用下拉自动填充)
“再次整理”表格内容参考:
A 列 | B 列 | F 列 | J 列 | |
---|---|---|---|---|
"images/pac/LETSROCK/00000004.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000004.jpg" | 1 | |
"images/pac/LETSROCK/00000005.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000005.jpg" | 3 | |
"images/pac/LETSROCK/00000006.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000006.jpg" | 5 | |
"images/pac/LETSROCK/00000007.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000007.jpg" | 7 | |
"images/pac/LETSROCK/00000008.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000008.jpg" | 9 | |
"images/pac/LETSROCK/00000009.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000009.jpg" | 11 | |
"images/pac/LETSROCK/00000010.jpg" | pause 0.0166666666666667 | "images/pac/LETSROCK/00000010.jpg" | 13 | |
……(省略) | …… | …… | …… | |
pause 0.0166666666666667 | 2 | |||
pause 0.0166666666666667 | 4 | |||
pause 0.0166666666666667 | 6 |
接下来把 F 列和 J 列以文本形式分别复制到“结果”这个 Sheet 中 A 列和 E 列
选中 E 列,先选中 E 列,在用键盘的 Shift
选中 A 列,然后选择升序排序
此时在 A 列就生成了可以直接复制到脚本里面的代码啦!
这样就不需要重复手动写定义动画的代码了
最后,再次提醒:这个方法仅适用于300张以内图片的情况,推荐不要超过100张,否则会非常卡
超过这个数量的动画请参考下一篇:“动画效果制作——CDD篇”