动画效果制作——基础篇

2022/6/8

本节文档介绍如何制作动画效果,本节会使用基础方法来做,比较简单

参考资料: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 ,否则不加
1
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
1
2

其实这样是给定义成了一个screenscreen的用法和 image 类似,展示 show ,隐藏 hide ,所以隐藏动画的写法自然是

# 参考 ver1.0 scene01.rpy 4494 行
	hide screen callscr
1
2

# 技巧

有没有发现,image callgif: 这里特别麻烦,有多少张图片语句行数就要 x2 ,写起来特别费时间

为了快速生成这样的代码,我们需要使用 Excel(我用的 MS Office Excel,与 WPS Excel 兼容性未知)

为了方便大家使用,这个xlsx 文件 在 1.0 版本中已经一起打包进去了,你可以通过解包后在 pac 动画文件夹获取,如:images\pac\LETSROCK\letsrock.xlsx

这个 Excel 文件分了三个 Sheet ,分别是“初步整理”,“再次整理”,“结果”,填写好这三个 Sheet 就能自动生成 image 定义代码

在“初步整理”中,你需要

  1. 在 A 列输入动画文件的"(英文引号)+相对位置(输入两个然后下拉自动填充即可)
  2. 在 B 列中输入图片名称(输入两个然后下拉自动填充即可)+"(英文引号)
  3. D 列会自动生成,不用管(如果自动生成那边行数不够就使用下拉自动填充,多了就删掉,与 A 列长度保持一致)
  4. 在 I 列输入 pause 时间(单位是秒)
  5. 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 列

接下来:

  1. 先复制 A 列到 F 列
  2. 再复制 B 列到 F 列中,从刚刚复制 A 列内容的结尾接上
  3. 在 J 列图片部分写上递增的奇数(从 1 开始,善用下拉自动填充)
  4. 在 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篇”