Project1

标题: 请问有什么脚本能直接停掉气泡动画吗 [打印本页]

作者: xuexizhanghao    时间: 2024-1-1 22:01
标题: 请问有什么脚本能直接停掉气泡动画吗
就是如图这个气泡图标
想做一个站在走廊边上面对栏杆会自动显示一个感叹号然后按确定就会跳出去传送到另一个地图的效果(就是类似于从二楼走廊直接跳出去跳到一楼的那种感觉),到这里我都会做。但是如果在气泡动画结束前移动的话,那个气泡动画还会继续显示,就会感觉很奇怪。我想的是,能不能在那附近的地上放上能直接截停这个气泡的脚本,只要玩家朝向不是面向栏杆就直接停止气泡动画。
或者说,请问各位大佬有没有其他好方法
谢谢诸位
作者: xuexizhanghao    时间: 2024-1-1 22:16

就大概这样子
不过我刚才又发现新问题了,这么写事件的话跳下去的过程中人物头上也会出感叹号
我现在觉得可能我的整个思路都不对了。
但是我最开始的版本是显示气泡后打开独立开关a,独立开关a开启后的事件页的内容是按确定跳下去(and关闭独立开关a)。但是这么做会导致感叹号只会显示一次。
总之就是,请问有什么好的建议吗,谢谢各位大佬们
作者: shiroin    时间: 2024-1-2 00:04
你可以试试这个
为了演出效果最自然,其实最好是拆分成一个并行事件和一个靠确认键触发的事件
并行事件是为了实现玩家站在指定位置甚至维持指定方向时才显示表情气泡
普通的确认键触发事件是为了实现你要的跳跃或传送效果
只要触发了跳跃或传送效果,就会因为坐标发生改变导致并行事件判定失败而不会一直播放气泡

QQ截图20240102000141.png (56.98 KB, 下载次数: 17)

QQ截图20240102000141.png

作者: xuexizhanghao    时间: 2024-1-2 23:00
本帖最后由 xuexizhanghao 于 2024-1-2 23:22 编辑
shiroin 发表于 2024-1-2 00:04
你可以试试这个
为了演出效果最自然,其实最好是拆分成一个并行事件和一个靠确认键触发的事件
并行事件是为 ...


谢谢你!

我试了一下

但是这么写有一个问题,面向右边之后按确定键只会出那个感叹号气泡,要按好多下确定才会掉下去(也许是特定关键帧按确定才会跳下去,我觉得可能是这个)。
这件事其实我发帖之前也发现了来着,目前的观察显示,只要这个第一个“显示气泡图标”(就是自动显示的那个)后边有“等待”,就会像这样只有在特定时间按确定(大概就是动画快结束时?)才能跳下去。否则就是待在原地,按确定继续显示气泡。
这样肯定是不太行

去掉第一个“显示气泡图标”后边的等待就可以随时按确定跳下去了,但是无论有没有第二个“显示气泡图标”,跳下去的运动过程中头上都会有那个感叹号。(即便等第一次的感叹号消失再按确定,无论有没有第二个“显示气泡图标”都会顶着感叹号跳下去)

这个写法的话,每次面对栏杆都希望可以显示感叹号的问题确实解决了,但是我的期望是跳下去的时候希望没有感叹号,目前为止我还没找到让它不出现的方法
请问大佬还有别的建议吗

PS:我试过把这个事件往左挪了一格,干脆不触发了
作者: xuexizhanghao    时间: 2024-1-2 23:15
各位大佬们,其实我稍微回归初心了一下

用这种方法倒是也能做到每次面对栏杆都能显示感叹号,也可以做到随时按确定都能跳下去
唯一美中不足的是在气泡动画结束前如果移动或者按确定往下跳的话就会带着这个气泡一起跑
如果在“显示气泡图标”后边加上等待的话,除了必须等动画结束才能动之外应该就完美了。所以我在想,如果能有什么能立刻叫停那个气泡图标的方法的话,放在事件004的独立开关a那页和事件16那里说不定就解决了。
然而我不会
求大佬们教教我,或者请问还有什么别的思路吗?我知道我会的很少经验也不多所以经常思路很狭隘,所以如果能帮我开拓一下思路的话,非常感谢
作者: shiroin    时间: 2024-1-2 23:21
针对你此前遇到的问题,你用了【如果确定键正被按着】的判断方式,这个判断方式你要触发就是长按确定键,和你设想的按一下逻辑是不一样的
所以我说要拆分成一个播放气泡的并行事件和一个靠确认键触发的跳跃事件,一开始用事件接触的方式其实并不适合实现你的需求
另外等待帧会阻塞后续流程,所以加了等待帧确实会导致其他事件被迫排队无法进行
作者: xuexizhanghao    时间: 2024-1-2 23:25
shiroin 发表于 2024-1-2 00:04
你可以试试这个
为了演出效果最自然,其实最好是拆分成一个并行事件和一个靠确认键触发的事件
并行事件是为 ...

抱歉刚才光想着实验忘记说谢谢了
我想改来着可是不知为何我家上这个网就非常卡,所以半天没改过来
对不起
作者: xuexizhanghao    时间: 2024-1-3 23:07
shiroin 发表于 2024-1-2 23:21
针对你此前遇到的问题,你用了【如果确定键正被按着】的判断方式,这个判断方式你要触发就是长按确定键,和 ...

我不知道我理解的对不对,是这个意思吗?

但是这样站在那里(事件018那个格子)时头上只会出一个空白的气泡,只有离开那个位置才会出来感叹号。请问我是哪里没理解对或者没做对吗
作者: shiroin    时间: 2024-1-4 09:21
xuexizhanghao 发表于 2024-1-3 23:07
我不知道我理解的对不对,是这个意思吗?

但是这样站在那里(事件018那个格子)时头上只会出一个空白的 ...

你的并行事件没有设置等待时间,每帧都在自动处理你的事件页内容
所以你只能看到一个空的气泡,气泡没有播放完就马上开始从头播放
以及你没有追加事件触发的时机,按你这个写法,就算没有走到指定地点也是会出现气泡的
作者: xuexizhanghao    时间: 2024-1-4 22:38
shiroin 发表于 2024-1-4 09:21
你的并行事件没有设置等待时间,每帧都在自动处理你的事件页内容
所以你只能看到一个空的气泡,气泡没有 ...


像这样吗?
试了一下,不等60帧在显示气泡图标加等待好像也行
但是我还是有一个问题,我希望只有在面对栏杆的时候才会有气泡,面向别处或者跳跃的过程中都没有气泡。现在这个写法依旧会顶着气泡到处走(我的意思是比如我面对栏杆触发气泡动画后,在动画播放完成之前像其他地方移动了,现在这个写法——当然这是从一开始我发帖时就存在的问题——现在这个写法就算离开了这个位置也会继续把气泡动画播放完。我想要的是如果我转身往别的方向走了或者按确定跳出去了,这个气泡会立刻消失)
请问……怎么做才好
谢谢
作者: shiroin    时间: 2024-1-4 23:21
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();
            }
        }
    });
}
作者: xuexizhanghao    时间: 2024-1-6 16:07
shiroin 发表于 2024-1-4 23:21
"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

...

请问,这个隐患……指什么
作者: shiroin    时间: 2024-1-6 17:05
xuexizhanghao 发表于 2024-1-6 16:07
请问,这个隐患……指什么

因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有可能会因此产生报错,如果你没有使用和表情气泡有关的插件,应该是不会有什么问题
作者: xuexizhanghao    时间: 2024-1-6 17:29
shiroin 发表于 2024-1-6 17:05
因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有 ...

谢谢
我没安那个,其实说来惭愧我还没搞懂插件
作者: xuexizhanghao    时间: 2024-1-6 21:08
shiroin 发表于 2024-1-4 23:21
"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

...

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

作者: shiroin    时间: 2024-1-6 23:45
本帖最后由 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, 下载次数: 22)

photo_2024-01-06_23-47-52.jpg

作者: xuexizhanghao    时间: 2024-1-7 18:19
shiroin 发表于 2024-1-6 23:45
你使用了两个嵌套的IF-ELSE条件句式,只有玩家位置和18号事件位置重合时,才可能进行第二个IF-ELS句式的 ...

我好像懂了,谢谢大佬




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1