特别效果总览
本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。
学习目标
- 了解“特别效果总览”在 Ren'Py 项目中的用途。
- 能在一个最小项目里验证本章相关语法或工作流。
- 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。
核心语法
ATL functionlayersscreensdisplayablesshaderperformance
可运行示例
text
init python:
def my_effect(trans, st, at):
# trans: 变换对象,改它的属性即可(trans.xoffset/zoom/rotate/alpha...)
# st: 本函数开始以来的秒数;at: 同 tag 显示以来的秒数
trans.xoffset = 10
return 0 # 返回 0 = 下一帧立即再调用;返回 None = 结束
transform my_transform:
function my_effect教程正文
这一篇起是「特效篇」,专讲网上常见的各种炫酷效果怎么在 Ren'Py 里实现:鼠标追踪/视差、 自定义光标、粒子天气、镜头震动、调色滤镜、着色器、动态文字、立绘交互等。先理解几个通用积木, 后面每篇直接给可用代码。
1. 效果都靠这几块积木
| 积木 | 适合做的效果 | 章节 |
|---|---|---|
| Transform / ATL | 移动、缩放、旋转、淡入、循环、缓动 | 11 |
ATL function(每帧 Python) | 鼠标追踪、视差、随机抖动、自定义逐帧逻辑 | 27 |
| Displayable(SnowBlossom / SpriteManager) | 雪/雨/花瓣/大量粒子、与鼠标互动 | 29 |
| Matrixcolor | 调色:昼夜、染色、黑白回忆、饱和度 | 31 |
Transform 的 blur / mesh / shader | 模糊、景深、CRT、色散、水波等 GPU 效果 | 32 |
| Text Shaders / 文本标签 | 打字机、抖动、波浪、渐变、彩虹文字 | 33 |
| Transition(with) | 切换时的过渡:闪白、震屏、擦除 | 12 |
| Screen(屏幕语言) | 把效果叠加到界面层、HUD、跟随鼠标 | 16 |
2. ATL function:逐帧逻辑的核心
Ren'Py 没有“每帧 tick 事件”,逐帧效果(鼠标追踪、抖动)靠 ATL 的 function 语句:
text
init python:
def my_effect(trans, st, at):
# trans: 变换对象,改它的属性即可(trans.xoffset/zoom/rotate/alpha...)
# st: 本函数开始以来的秒数;at: 同 tag 显示以来的秒数
trans.xoffset = 10
return 0 # 返回 0 = 下一帧立即再调用;返回 None = 结束
transform my_transform:
function my_effect要点(官方约定):
- 函数签名固定
(trans, st, at),只通过修改trans产生效果,不要有其它副作用。 - 返回数字 = 多少秒后再调用(
0表示尽快/每帧);返回None= 交给下一条 ATL 语句。 - 它可能在“预测”时被以任意值调用,所以别在里面写存档/IO。
3. 图层与叠加位置
效果要叠在“哪一层”很关键:
master:背景与立绘所在层。screens:界面层(对话框、HUD)。overlay:覆盖层(适合放全屏特效、跟随鼠标的光效)。- 用
show layer master: <transform>可给整层加效果(如整屏模糊/调色)。 - 用
screen+add "x" at fx把效果挂到界面上(如全屏雨、暗角 PNG)。
text
# 给整个背景立绘层做轻微呼吸式缩放
show layer master:
zoom 1.0
ease 3.0 zoom 1.03
ease 3.0 zoom 1.0
repeat4. 性能与取舍(重要)
- 逐帧
function每帧跑 Python,控制数量(几个图层 OK,几百个对象请用 SpriteManager)。 - SnowBlossom/SpriteManager 为大量粒子优化:每个 displayable 每帧只渲染一次。
- shader/blur/mesh 走 GPU,效果强但低端机/网页端要测;移动端尤其注意。
- 大量
blur、全屏实时着色器在 Web/旧机上可能掉帧,提供“关闭特效”选项更友好。 - 用
persistent存一个“特效开关”,让玩家可关(晕眩/性能)。
5. 特效篇目录
| 编号 | 文件 | 内容 |
|---|---|---|
| 27 | 27-鼠标追踪与视差.md | 背景/多层跟随鼠标、倾斜、惯性平滑、悬停放大 |
| 28 | 28-自定义鼠标光标与拖尾.md | 静态/动画光标、情境光标、跟随光效、拖尾 |
| 29 | 29-粒子与天气特效.md | 雪/雨/樱花/萤火、SpriteManager、躲避鼠标的粒子 |
| 30 | 30-镜头特效.md | 震屏、Ken Burns 推拉、闪白、暗角、信箱、缩放冲击 |
| 31 | 31-调色与滤镜.md | Matrixcolor 昼夜/染色/黑白/饱和、模糊景深 |
| 32 | 32-着色器与高级渲染.md | model/mesh/shader、CRT、色散、水波、文本着色器入门 |
| 33 | 33-文字特效.md | 打字机、抖动、波浪、渐变、彩虹、逐字上色 |
| 34 | 34-立绘与界面交互特效.md | 说话者高亮/变暗、悬停放大、呼吸待机、按钮反馈 |
6. 通用建议
- 先用最简单的 transform/ATL 实现 80% 效果;不够再上 function/shader。
- 把可复用效果做成带参数的 transform,全项目统一调用。
- 给玩家一个“减少动态效果”的设置项(无障碍 + 性能)。
下一篇从你点名的「鼠标追踪」开始。
常见坑
- 先用最小示例验证语法,再逐步加复杂功能。
- 发布前运行 Ren'Py Lint,并在目标平台实际预览。
官方参考
- Ren'Py 官方文档:https://www.renpy.org/doc/html/
在 GenPy 里怎么做
- 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
- 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
- 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。
推荐继续阅读:
