Skip to content

特别效果总览 ​

本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。

学习目标 ​

  • 了解“特别效果总览”在 Ren'Py 项目中的用途。
  • 能在一个最小项目里验证本章相关语法或工作流。
  • 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。

核心语法 ​

  • ATL function
  • layers
  • screens
  • displayables
  • shader
  • performance

可运行示例 ​

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
    repeat

4. 性能与取舍(重要) ​

  • 逐帧 function 每帧跑 Python,控制数量(几个图层 OK,几百个对象请用 SpriteManager)。
  • SnowBlossom/SpriteManager 为大量粒子优化:每个 displayable 每帧只渲染一次。
  • shader/blur/mesh 走 GPU,效果强但低端机/网页端要测;移动端尤其注意。
  • 大量 blur、全屏实时着色器在 Web/旧机上可能掉帧,提供“关闭特效”选项更友好。
  • 用 persistent 存一个“特效开关”,让玩家可关(晕眩/性能)。

5. 特效篇目录 ​

编号文件内容
2727-鼠标追踪与视差.md背景/多层跟随鼠标、倾斜、惯性平滑、悬停放大
2828-自定义鼠标光标与拖尾.md静态/动画光标、情境光标、跟随光效、拖尾
2929-粒子与天气特效.md雪/雨/樱花/萤火、SpriteManager、躲避鼠标的粒子
3030-镜头特效.md震屏、Ken Burns 推拉、闪白、暗角、信箱、缩放冲击
3131-调色与滤镜.mdMatrixcolor 昼夜/染色/黑白/饱和、模糊景深
3232-着色器与高级渲染.mdmodel/mesh/shader、CRT、色散、水波、文本着色器入门
3333-文字特效.md打字机、抖动、波浪、渐变、彩虹、逐字上色
3434-立绘与界面交互特效.md说话者高亮/变暗、悬停放大、呼吸待机、按钮反馈

6. 通用建议 ​

  • 先用最简单的 transform/ATL 实现 80% 效果;不够再上 function/shader。
  • 把可复用效果做成带参数的 transform,全项目统一调用。
  • 给玩家一个“减少动态效果”的设置项(无障碍 + 性能)。

下一篇从你点名的「鼠标追踪」开始。

常见坑 ​

  • 先用最小示例验证语法,再逐步加复杂功能。
  • 发布前运行 Ren'Py Lint,并在目标平台实际预览。

官方参考 ​

在 GenPy 里怎么做 ​

  • 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
  • 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
  • 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。

推荐继续阅读:

Built for GenPy creators.