设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: xuexizhanghao
打印 上一主题 下一主题

[有事请教] 请问有什么脚本能直接停掉气泡动画吗

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3876
在线时间
992 小时
注册时间
2016-12-6
帖子
370
11
发表于 2024-1-4 23:21:53 | 只看该作者
xuexizhanghao 发表于 2024-1-4 22:38
像这样吗?
试了一下,不等60帧在显示气泡图标加等待好像也行
但是我还是有一个问题,我希望只有在面对 ...

"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

比如直接遍历找到玩家身上的气泡然后直接执行endBalloon()函数,但有没有隐患我就不清楚了,通常是不建议直接动底层逻辑的,你需要的话可以试试看
直接脚本输入下列代码:
var spriteset = SceneManager._scene._spriteset;
if (spriteset) {
    spriteset._characterSprites.forEach(function(sprite) {
        if (sprite._character === $gamePlayer) {
            if (sprite._balloonSprite) {
                sprite.endBalloon();
            }
        }
    });
}
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
917
在线时间
61 小时
注册时间
2021-7-15
帖子
24
12
 楼主| 发表于 2024-1-6 16:07:08 | 只看该作者
shiroin 发表于 2024-1-4 23:21
"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

...

请问,这个隐患……指什么
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3876
在线时间
992 小时
注册时间
2016-12-6
帖子
370
13
发表于 2024-1-6 17:05:54 | 只看该作者
xuexizhanghao 发表于 2024-1-6 16:07
请问,这个隐患……指什么

因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有可能会因此产生报错,如果你没有使用和表情气泡有关的插件,应该是不会有什么问题
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
917
在线时间
61 小时
注册时间
2021-7-15
帖子
24
14
 楼主| 发表于 2024-1-6 17:29:20 | 只看该作者
shiroin 发表于 2024-1-6 17:05
因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有 ...

谢谢
我没安那个,其实说来惭愧我还没搞懂插件
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
917
在线时间
61 小时
注册时间
2021-7-15
帖子
24
15
 楼主| 发表于 2024-1-6 21:08:30 | 只看该作者
shiroin 发表于 2024-1-4 23:21
"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

...

试了一下,按确定跳出去的那个气泡顺利截停了,但是移动/转身截停那个还是停不了。
我是不是太蠢了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3876
在线时间
992 小时
注册时间
2016-12-6
帖子
370
16
发表于 2024-1-6 23:45:28 | 只看该作者
本帖最后由 shiroin 于 2024-1-6 23:49 编辑
xuexizhanghao 发表于 2024-1-6 21:08
试了一下,按确定跳出去的那个气泡顺利截停了,但是移动/转身截停那个还是停不了。
我是不是太蠢了{:5_15 ...


你使用了两个嵌套的IF-ELSE条件句式,只有玩家位置和18号事件位置重合时,才可能进行第二个IF-ELS句式的判定,这也意味着当玩家离开当前位置,即便你头上顶着气泡,也不会触发消除气泡的脚本
按照你这个写法,只有玩家和事件位置重合,且方向不朝右,才可能触发脚本代码

所以如果你的目的是【玩家离开事件位置时,消除已有的表情气泡】,可以尝试这个事件写法:
玩家进入18号事件位置时,打开特定开关(假设是打开1号开关)
地图上额外放置一个并行事件,只有1号开关打开时才激活,并行事件内容是:

如果:脚本:$gameMap.event(18).x !== $gamePlayer.x || $gameMap.event(18).y !== $gamePlayer.y
         脚本:var spriteset = SceneManager._scene._spriteset;
if (spriteset) {
    spriteset._characterSprites.forEach(function(sprite) {
        if (sprite._character === $gamePlayer) {
            if (sprite._balloonSprite) {
                sprite.endBalloon();
            }
        }
    });
}
      开关操作:1号开关 = OFF

通过这个新的并行事件去监听玩家离开事件区域的后续情况,理论上可以防止因为无法触发脚本而没有及时消除表情气泡

photo_2024-01-06_23-47-52.jpg (125.17 KB, 下载次数: 10)

photo_2024-01-06_23-47-52.jpg
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
917
在线时间
61 小时
注册时间
2021-7-15
帖子
24
17
 楼主| 发表于 2024-1-7 18:19:15 | 只看该作者
shiroin 发表于 2024-1-6 23:45
你使用了两个嵌套的IF-ELSE条件句式,只有玩家位置和18号事件位置重合时,才可能进行第二个IF-ELS句式的 ...

我好像懂了,谢谢大佬
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-4 15:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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