楼主: xuexizhanghao

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

[复制链接]
梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 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();
            }
        }
    });
}
回复

使用道具 举报

梦石
0
星屑
1345
在线时间
92 小时
注册时间
2021-7-15
回帖
26
 楼主| 发表于 2024-1-6 16:07:08 | 显示全部楼层
shiroin 发表于 2024-1-4 23:21
"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

...

请问,这个隐患……指什么
回复

使用道具 举报

梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-1-6 17:05:54 | 显示全部楼层
xuexizhanghao 发表于 2024-1-6 16:07
请问,这个隐患……指什么

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

使用道具 举报

梦石
0
星屑
1345
在线时间
92 小时
注册时间
2021-7-15
回帖
26
 楼主| 发表于 2024-1-6 17:29:20 | 显示全部楼层
shiroin 发表于 2024-1-6 17:05
因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有 ...

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

使用道具 举报

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

...

试了一下,按确定跳出去的那个气泡顺利截停了,但是移动/转身截停那个还是停不了。
我是不是太蠢了
捕获3.PNG 捕获2.PNG
回复

使用道具 举报

梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 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
回复

使用道具 举报

梦石
0
星屑
1345
在线时间
92 小时
注册时间
2021-7-15
回帖
26
 楼主| 发表于 2024-1-7 18:19:15 | 显示全部楼层
shiroin 发表于 2024-1-6 23:45
你使用了两个嵌套的IF-ELSE条件句式,只有玩家位置和18号事件位置重合时,才可能进行第二个IF-ELS句式的 ...

我好像懂了,谢谢大佬
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部