GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 1224|回复: 63
收起左侧

[教学] 【翻译】Ren'Py游戏编程入门

    [复制链接] |关注本帖

class test

GM活动员

真理世界没有梦想的咸鱼小小舞台『私有海域』




    在追踪游戏更新的时候,发现《Freshmen: Physical Education》游戏作者撰写的一篇关于Ren'Py游戏编码的入门教程。他并没有完整讲述怎样从零开始游戏编程,这方面我更推荐大家浏览Ren'Py中文空间的相关文档和教程(https://www.renpy.cn/doc/)。

    不过这位作者结合自己创作Freshmen的亲身经历,分享了一些不错的工具和教程,以及如何养成良好的编码习惯。对于想要入门的游戏制作者还是有些帮助的,于是我翻译了一下发来论坛。

    原文发布于作者红P:https://www.patreon.com/FreshmenVN
    转载地址:https://kemono.su/patreon/user/68385433/post/90711031

    以下是全文翻译。如有错漏请指出,感谢@user_login 等多位坛友提供的翻译和校对帮助。


    幕后花絮 #4:游戏编程

    欢迎回到幕后花絮,在这里我将深入探讨游戏制作的方方面面。本月我将讨论的是我在开始游戏创作时最不熟悉的领域:如何将剧本和美术转化为可玩的视觉小说游戏。

    我曾在幕后花絮#1中谈到,并不是美术家的编剧和程序员是如何使用Daz 3D制作游戏渲染的。同样,对于不是程序员的作家和美术家来说,有一个名为Ren'Py的便捷程序可以让业余程序员轻松创作视觉小说。

    什么是Ren'Py?

    Ren'Py是一款免费的视觉小说引擎,它通过内置的、易于使用的命令来显示图像、对话、菜单、转场(transition)等,从而简化了Python编程语言的使用。如果你玩过一些独立的视觉小说,你可能会注意到菜单和操控的相似性,这是因为我们使用的是基于相同模板构建的相同程序。

    如果曾经使用过基础的HTML,比如美化你的MySpace页面,那么你就可以轻松掌握Ren'Py。

    Ren'Py入门

    在详细的用户手册基础上,Ren'Py还有大量教程,我将在下面贴出其中一些链接。我并不是一个程序高手,所以不会深入细节,而是将简单介绍一下这个软件,然后着重探讨我在过去几年中掌握的一些技巧和窍门。

    当然,你需要做的第一件事是下载Ren'Py。就像我上面提过的,它完全免费并附带基础知识教程。当你准备好要制作自己的游戏项目时,只需要点击 +创建新项目,输入标题,选择分辨率(我用的是1920x1080),然后选择重点颜色。

    我按照这个教程制作了一个测试场景,你可以在这篇文章中下载。这个测试只是一系列图像和对话,因此制作起来非常简单。这就是脚本的开头:



    你可以看到:
    前面带有#符号的注释。#符号告诉Ren'Py这条注释不是游戏的一部分,可以忽略。
    Connor和Marco的定义。这将设定你在一行对话前输入的字母,该字母将告诉游戏在对话上方显示的人名以及人名的颜色。
    开始标签。每个Ren'Py游戏都以这个标签开始,这样当您点击主菜单上的“开始”时,游戏就会跳转到这里。
    对话内容,前后带着引号。
    场景名称和溶解(Dissolve),告诉引擎要加载什么图片以及如何过渡。

    很简单吧?如果你像我一样是个新手,那么按照教程开始制作一个非常简单的测试游戏,是一个很好的入门方法。

    编码程序

    Ren'Py是将代码转化为可玩游戏的游戏引擎。创建和编辑代码文件需要一个外部程序,它不属于Ren'Py本身。Ren'Py的创建者推荐了一个名为Editra的程序,我对它并不熟悉,但想必对初学者很友好。我个人使用的是Visual Studio Code(缩写为 VSCode),这是业界通用的程序。

    在上面的截图中,你会发现所有的行和术语都用了不同的颜色。这种颜色编码被称为语法高亮,可以帮助你分辨所看到的内容。我曾经在没有语法高亮的情况下编写代码,所有文本都是白色的,这简直是一场噩梦;语法高亮是必须的。

    VSCode内置了常用编程语言的高亮功能,因此Ren'Py脚本最初会按照Python的规则高亮显示。由于Ren'Py是对Python的改编,有自己的命令,因此你需要下载Ren'Py高亮扩展

    如果你有色盲或者只是不喜欢它的配色,也可以调整颜色,但我使用的是扩展自带的默认颜色。下面是完整游戏中启用高亮显示后的部分代码:


    每种颜色都能让你一目了然地知道正在查看的代码类型。例如,绿色文本是不会在游戏中显示的注释;这是在文件中记笔记的便捷方法。紫色文本是基本命令,比如告诉游戏在选择变量为真时显示什么,在不为真时显示什么。橙色是对话文本,以此类推。

    组织结构

    语法高亮有助于解析代码,而对每个元素使用一致的命名规范则有助于保持这些元素的条理性。

    每个人在这方面的做法都不尽相同,因此你常用的命名规范其实就是适合你的命名规范。有些人喜欢标签越短越好,而我喜欢把大部分单词拼写出来。这似乎会延长输入代码的时间,但我有一个小窍门。

    从图片文件名、精灵表达式到代码块标签,我都使用相同的命名规范。下面我们来看一些精灵(sprite);你在这里看到的是我在代码中使用的简称,然后是完整的文件指向:


    对于每个显示角色不同表情的精灵,我都会将其命名为[角色代码字母][表情名称][精灵类型]。例如,t annoyed d1 将显示Tomas穿着第一天服装时的恼怒表情。完整的文件名也是类似的,只是拼写得更长一些。

    我对每个角色都使用完全相同的表情命名。因此,mt smiling d2 和 l smiling naked semi 将分别显示Matt和Leo的微笑表情,表情后面的部分指定了需要显示的精灵版本。所有第二天的服装精灵都以 d2 结尾,所有果体精灵都以 naked [丁丁状态] 结尾。

    此外,我还会在代码的所有部分都标上大大的标签框,就像这样:


    并使用如下带#的标签开始具体部分:


    这样,我就可以很容易地追踪到每段代码的内容,当需要引用图片或选择特定角色的变量时,我只需在文件中搜索# Connor或类似内容即可。

    不管你喜欢怎样的命名规范,我认为至少得有一个。使用#注释会为你省去很多后续的麻烦!

    显示图片

    游戏中使用的图像有三种:场景(scene)、精灵(sprite)和屏幕(screen)。场景包括 CG 和背景,基本上是占据整个窗口的任何图像。精灵是带有透明背景的人物图像,可以根据你的命令改变表情和位置。屏幕是一种覆盖图层,可以用来做各种各样的事情。

    制作游戏最简单的方法就是你在测试游戏中看到的:一系列CG(场景),使用场景命令进行变化。许多故事游戏都是这样制作的。

    由于 Ren'Py 的构建方式,使用精灵也相对简单。首先,您需要定义一个角色。以下是为游戏定义的主要角色:


    每个角色都有一到两个字母的标签(比如c代表Connor,ar代表Asher)。这里定义的是每个角色被引用时应该显示的细节。举例来说,如果你在一行对话前输入mt,游戏就会知道应该显示Matt的对话,他的名字应该是十六进制颜色代码指定的红色,而且他有一个同样以mt标签开头的精灵,可以根据简单的命令改变。

    在之前的某张图片中,你可以看到Connor的精灵有不同的样子。每个精灵都必须根据他的对话分别呈现,并显示为一个屏幕。这是因为在技术上来说精灵是屏幕的一个图层,我这样做是为了将他准确地放置在对话框旁边我想要的位置。

    屏幕的工作原理略有不同,定义方式也更为复杂,就像这样:


    每个屏幕都有一个可在代码中引用的标签。标签下方定义了其属性,如屏幕的位置。

    每张图片的最后一行——connor_expression标签——是我几周前才学到的。从本质上讲,它能让屏幕像普通精灵一样工作,你只需显示新的屏幕,之前显示的屏幕就会自动移除,因为它们使用了相同的标签。

    之前我都是先手动隐藏每个屏幕,然后再显示新的屏幕。我不知道自己有多少次没有输入正确的要隐藏的屏幕,导致多个Connor重叠在一起。现在我再也不用担心这个问题了。如果你使用屏幕,别忘了标记它们!

    总结一下:显示带有对话的图像是Ren'Py的设计初衷,因此它的编码非常简单。只需确保所有内容都被正确地标记和标注——一致的命名规范也会让你省心不少。

    菜单和变量:保持简单

    菜单和变量——我常说的选择标志的准确名称——是我长期以来搞得过于复杂的东西。

    如果你在不同角色之间跳转,然后又回到同一个菜单,那么菜单的编码就会变得像迷宫一样复杂,the Frat Party更新中的一些菜单就是这样的。我在the Club更新时吸取了教训,做了两件不同的事情。

    the Club有四个入口分支:独自一人到达、与Asher一起玩耍后留下、与Alex或Isaia一起到达。对于Alex和Isaia,我特意没有让你们去和其他人打招呼,以避免反复回到the frat party的分支菜单。

    对于另外两个,编码非常简单:菜单指向了每一个人,当你选择他时,就会设置一个变量,而当你返回选择菜单时,那个人的选项就消失了。不管你有没有跟他打招呼,都没有变化。

    如果你像我一样设计了大量的分支选择,那变量的数量就会失控。我目前用了1000多个变量。其中很多变量都是为了菜单而设的,为已选的对话选项设置一个标记,以便从菜单里移除。但也有很多是影响人物关系的决策。

    为了解决这个问题,我将多个选择合并为一个变量,这样就能更轻松地撰写和编码接下来的游戏部分。虽然不一定能做到这一点,但能引用一个变量而不是多个变量,就能省去很多编码上的麻烦。

    总之,如果你像我一样是个新手,一开始尽量不要对人物的互动反馈太有野心。变量越多,菜单分支越多,测试起来就越困难。命名规范和颜色编码的帮助有限!

    快捷键

    最后,我有一招可以大大加快编码时间,那就是使用快捷键。想象一下法庭速记员——你只需键入几个键,就会出现一份完整的陈述。这意味着语句的拼写总是正确的,你就不需要花时间把它完整地打出来。

    我使用一款名为Breevy的程序,试用免费,但必须以低廉的价格获得许可。这个程序可以让你指定一系列让你记忆深刻的按键,以及按下这些键时应该写的内容。我的一些缩写就是这样的:


    这就是命名规则再次发挥作用的地方。比方说,我想展示Alex穿着第一天的衣服时的狂妄表情。我只需在编码时输入ax(他的角色代码),然后输入 `ck,就会立即弹出cocky d1。就像我输入 gr(Griffin)加上 `ck 或其他角色一样。

    这绝对可以用于重复输入的任何内容,而且你可以设置任何你想要的快捷键名称。我在开头使用 `,是因为这是一个我从来不会按的键,这样可以防止在我输入back这样的单词时,让ck变成cocky d1。而我知道很多人习惯使用反斜线作为快捷键的开头。

    有一点要记住:如果你用了代码例如`ck,你就不能同时用`cks来表示别的项目,因为`ck的短语会在你加上s之前立即跳出来。

    记住所有快捷键可能需要一点时间,但这对我帮助很大。它极大地简化了我的编码工作,避免了大量因错别字造成的错误。我强烈推荐它!

    教程

    这就是我目前掌握的技巧。就像我之前说过的,有很多教程可以更详细地介绍如何使用 Ren'Py制作视觉小说。这里有几个链接可以帮助你入门:

    Ren'Py快速入门文档
    - 入门基础知识。从这里开始!

    YouTube上的Zeil Learnings - 这个频道有许多简单易学的创建指南,例如图片库。她还提供可在Itch.io上下载的模板。

    YouTube上的Visual Novel Design - 除了基础知识外,该频道还提供一些更高级的Ren'Py功能教程。

    YouTube上的Game Developer Training - 这个人介绍了很多不同的游戏开发主题,包括Daz 3D。他有一些Ren'Py初学者指南播放列表,可能会有所帮助。

    qubodupDev制作的基于图像的主菜单教程视频 - 我在制作游戏主菜单时就是按照这段视频进行的。他讲解图像定位的方法特别有用。

    一般来说,在你选择的搜索引擎中输入需要帮助的内容 + "Ren'Py",您通常会找到包含您所需答案的主题或网页,以及该功能的Ren'Py官方文档。

    我想今天的编码话题就到此为止了。虽然不一定是最有趣的话题,但如果你想制作自己的视觉小说,又是编程新手,那么绝对有必要了解一下。Ren'Py让大多数人都能进行VN创作——如果你曾因担心不会编程而退缩,我希望能让你不再畏惧进入视觉小说的创作世界!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    评分

    参与人数 27旅程 +1 金币 +1 血液 +73 追随 +25 堕落 +10 收起 理由
    jbtty + 3 + 1 + 1
    ga2006024244 + 5 + 1 神马都是浮云
    狗四月 + 2 + 1 + 1 很给力!
    zhuovboyan + 2
    you9632587 + 5 + 1
    AncL + 3 + 1 + 1
    威风妖怪麒麟 + 1 + 1
    sonyboy049 + 5 + 1 很给力!
    上树 + 3 + 1 + 1
    cc簗橗 + 1 很给力!

    查看全部评分

    回复

    使用道具 举报

    Level 10 max

    GM活动员

    不曾寄出的信件『随时随地开启!』漂洋小船『随时随地开启!』冒险用指南针破损的旧书丛林的鸟飞走了人鱼之泪雪王的心脏幽灵竹筒

      回复

      使用道具 举报

      GM活动员

      Level 0

      没有梦想的咸鱼真理世界『终点站:极地』被释放的灵魂征服之王虚空之海的鲸死灵之书圣甲虫秘典破损的旧书夜魔护符

        Makima 发表于 2023-10-13 12:50:30 | 显示全部楼层 |取消关注该作者的回复
        回复

        使用道具 举报

        GM活动员

        虚空之海的鲸『私有海域』『钜鲸』海的记忆

          cdcai 发表于 2023-10-13 12:51:50 | 显示全部楼层 |取消关注该作者的回复
          回复

          使用道具 举报

          Level 0

          『不败之花』时间尽头的虚空SCP-s-1889-第一页安静的海边火柴 - Gamemale美恐:启程落雪勇者与龙的传说-封面霍格沃茨特快列车One Ring

            回复

            使用道具 举报

            Level 0

            没有梦想的咸鱼岛田源氏百相千面-晦白野威業火死鬥永远的克叔终归一人吃饱金币的Doge『随时随地开启!』『随时随地开启!』

              renpy算是目前比較簡單的遊戲引擎了,不過還是需要學一下,辛苦大大做教程了
                收起(2)
              回复

              使用道具 举报

              GM活动员

              官复原职实现梦想终归一人崩朽之青铜龙王虚空之海的鲸和你一起飞行的皮卡丘极·龙の意『召唤好运的角笛』 『先知灵药:真视』重建熊屋

                回复

                使用道具 举报

                Level 0

                【圣诞限定】心心念念小雪人铁牛石鬼面不灭狂雷雄躯的昇格诺曼底号十年一梦不朽之恋泰比里厄斯白野威

                  其实最简单的办法就是学Python,之后基本能把renpy的看懂个七七八八了
                  回复

                  使用道具 举报

                  『迷翳森林回忆录』没有梦想的咸鱼 『先知灵药:真视』『不败之花』六出冰花岛屿探险家龙鳞石卡利亚权杖

                    ZHD 发表于 2023-10-13 13:06:08 | 显示全部楼层 |取消关注该作者的回复
                    大佬好厉害!最近老是有一些语句看不懂,看来还是得学啊!
                    回复

                    使用道具 举报

                    没有梦想的咸鱼实现梦想泰比里厄斯雄躯的昇格虚空之海的鲸業火死鬥追忆永浴爱河净化污秽的天照征服之王

                      回复

                      使用道具 举报

                      没有梦想的咸鱼真理世界一国之主 『先知灵药:真视』『不败之花』虚空之海的鲸男巫之歌史莱姆牧场诺曼底号缘起星空

                        感谢大佬翻译的教程,说起来大家有兴趣(特别是FVN)好像都可以尝试自己做一个VN游戏了!
                        回复

                        使用道具 举报

                        没有梦想的咸鱼圣剑艾尔尤因新月护符岛田源氏卡利亚权杖冒险用指南针我已倾听,我已感受,我已思考岛田半藏安杜因·乌瑞恩泰凯斯·芬得利

                          回复

                          使用道具 举报

                          艾吉奥时间尽头的虚空荒野大镖客:救赎 II月光骑士索尔·奥丁森

                            大学选修学过c的话入门起来应该无压力找一个演出效果优秀的renpy游戏(特指社交尴尬)一边看教程一边看看人家是怎么写的理解起来应该会更容易
                            回复

                            使用道具 举报

                            真理世界不朽之恋克莱夫・罗兹菲尔德虚空之海的鲸邪恶圣杯『不败之花』双向圣杯:焕然意志“腐败女神”玛莲妮亚时间尽头的虚空诺克提斯·路西斯·伽拉姆

                              回复

                              使用道具 举报

                              没有梦想的咸鱼崩朽之青铜龙王虚空之海的鲸实现梦想官复原职永浴爱河白野威業火死鬥十年一梦男巫之歌

                                Burry 发表于 2023-10-13 13:18:18 | 显示全部楼层 |取消关注该作者的回复
                                很详细的教程呢,准备参考一下学习知识。不过这个代码密密麻麻看的有点眼花。
                                回复

                                使用道具 举报

                                牧羊人

                                  回复

                                  使用道具 举报

                                  没有梦想的咸鱼真理世界『随时随地开启!』十字叶章『随时随地开启!』被释放的灵魂我的天使可怖的眼球幸福的小阿尔月影狼

                                    回复

                                    使用道具 举报

                                    诺克提斯·路西斯·伽拉姆業火死鬥钢铁侠永远的克叔卡利亚权杖极·龙の意死灵之书虚空之海的鲸史莱姆牧场男巫之歌

                                      回复

                                      使用道具 举报

                                      成年独角兽琉璃玉坠风雪之家模擬人生4春之歌恶魔城风物长宜特殊-家园卫士Ⓛ『还乡歌』特殊-家园卫士Ⓡ

                                        Kashio 发表于 2023-10-13 14:29:04 | 显示全部楼层 |取消关注该作者的回复
                                        回复

                                        使用道具 举报

                                          回复

                                          使用道具 举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2024-4-29 09:59 , Processed in 0.184683 second(s), 153 queries , Redis On.

                                          Copyright © 2013-2024 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表