找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5706|回复: 0

[教程] 如何在RenPy中做出鼠标按下时变化的鼠标光标?

[复制链接]
发表于 2020-3-3 17:19:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 立笔犊 于 2020-3-3 17:30 编辑

      首先我们知道,在RenPy中可以修改默认的鼠标光标,让原本windows自带的普通光标变成定制的、符合游戏风格的光标,并且可以通过每秒20帧的帧序列做出动态光标的效果。
      并且文档中也说当鼠标处于不同的界面时可以显示不同的光标(不过我自己试的时候好像存在一点问题)。
1.png

      那么问题来了?如果我想提高交互性、让玩家点击鼠标的时候切换为另一个光标的图案、响应玩家的点击要怎么办呢?
      例如《罗曼圣诞探案集》中的效果演示:
演示视频.zip (432.88 KB, 下载次数: 30)


【怎么做】
因为RenPy到目前并没有提供这样的接口,所以要做到这样的效果需要修改一小部分RenPy引擎。
1、进入renpy的系统目录下的display文件夹(我个人的目录是:C:\Program Files (x86)\renpy-7.3.2-sdk\renpy\display)。
2、用atom打开core.py文件,来到第2444行左右的位置。在上下之间插入一段代码,也就是下图中两行“#”之间的语句。
注意:这段代码处于的相对位置很重要,请一定要在上下这两段代码中间。
2.png

3、保存关闭,回到项目的代码中。
如果原先写过define config.mouse的代码就直接修改
如果原先没写过就加一行:
[RenPy] 纯文本查看 复制代码
define config.mouse = {'default' :[('XXXX.png', 0, 0)],'mousedown' :[('YYYY.png', 0, 0)]}
其中的XXXX是鼠标未按下时光标的图片,YYYY是鼠标按下时光标的图片。

4、如果项目点击运行后没有反应,或者重启引擎后引擎打不开,那么说明新加的这段代码有误,引擎无法正常启动。
(1)请检查代码的上下文位置和内容完全一致,尤其注意大小写、漏字符、误用中文字符。
(2)请使用atom打开core.py文件并修改。测试发现使用notepad++打开修改,打出的tab键似乎不能识别,会判定为错误。
(3)如果实在没有任何问题,项目和引擎还是打不开,请删去两段#之间添加的代码(这里的#就是标记这段代码是后期添加的,方便删除),以恢复引擎的原状态。

5、因误操作导致的任何损失本人概不负责。

【为什么】
那么为什么要这么做呢?
建议有一定python基础且看完了renpy文档的朋友看下面的内容。
实现思路:
1、这个效果实际上是检测鼠标按下事件、修改光标的图片。
2、renpy文档中说可以使用pygame检测各种事件。
3、renpy引擎中config.mouse是一个字典,renpy刷新光标的机制是根据当前focus的界面修改mouse_kind变量,再用mouse_kind去索引该字典获得图片的字符串名称,再渲染光标。
我们这里做的就是在中间手动检测鼠标按下事件、强行修改mouse_kind变量,去索引我们定义的config.mouse中的mousedown键的值,从而达到鼠标按下显示另一个光标的效果。
4、因为加入的这段代码的判定条件是比较严苛的,首先检索config.mouse中是否存在mousedown字段,不存在就正常继续,再检索pygame的按下事件。这样的代码就目前来讲不会在逻辑上对引擎造成任何破坏。


【还能做到更多】
同时,因为config.mouse是一个运行中即时查阅的字典,并不是提前配置好、运行阶段不可修改的变量。
所以可以在运行阶段随时修改config.mouse。
比如:你是一个侦探,平时你的光标都是正常的,但当开始搜查的时候鼠标光标变成一个放大镜图案。
只要在进入搜查前修改config.mouse,搜查后再改回来就可以了。
从而大大提高renpy游戏的丰富性。

【卷尾语】
其实修改鼠标光标、动态光标、可编程光标在成熟的通用引擎中算是很常见的操作,但因为RenPy封装得过于简单隐藏了许多面向对象特性的接口,所以这方面对于普通用户来说做得还是不够。
希望这个帖子可以帮到想做这方面工作的人。

另外,这个东西是我在制作《罗曼圣诞探案集》时摸索出来的,因为当时学过Qt对事件系统有一定了解所以知道大概怎么做,不过也花了好几个小时才试出来。我是因为这个游戏才了解到的RenPy,主创也是我的好朋友。
打个小广告。
《罗曼圣诞探案集》,使用RenPy引擎制作,已上架steam,目前好评率97%,特别好评发售中!




评分

参与人数 1干货 +1 收起 理由
BuErShen + 1 感谢分享!

查看全部评分

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

本版积分规则

小黑屋|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-4-20 16:22 , Processed in 0.070647 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表