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

Project1

 找回密码
 注册会员
搜索

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

查看数: 842 | 评论数: 16 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-1-1 22:01

正文摘要:

就是如图这个气泡图标 想做一个站在走廊边上面对栏杆会自动显示一个感叹号然后按确定就会跳出去传送到另一个地图的效果(就是类似于从二楼走廊直接跳出去跳到一楼的那种感觉),到这里我都会做。但是如果在气泡动 ...

回复

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

我好像懂了,谢谢大佬
shiroin 发表于 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, 下载次数: 32)

photo_2024-01-06_23-47-52.jpg
xuexizhanghao 发表于 2024-1-6 17:29:20
shiroin 发表于 2024-1-6 17:05
因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有 ...

谢谢
我没安那个,其实说来惭愧我还没搞懂插件
shiroin 发表于 2024-1-6 17:05:54
xuexizhanghao 发表于 2024-1-6 16:07
请问,这个隐患……指什么

因为这个脚本效果是在气泡没有正常完整播放前就开始执行endBalloon()内容,和表情气泡相关的代码或插件有可能会因此产生报错,如果你没有使用和表情气泡有关的插件,应该是不会有什么问题
xuexizhanghao 发表于 2024-1-6 16:07:08
shiroin 发表于 2024-1-4 23:21
"气泡立即消失",这个是RPG maker原生代码没有设计的功能,所以想要实现这个功能,估计要动底层代码了

...

请问,这个隐患……指什么
shiroin 发表于 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();
            }
        }
    });
}
shiroin 发表于 2024-1-4 09:21:08
xuexizhanghao 发表于 2024-1-3 23:07
我不知道我理解的对不对,是这个意思吗?

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

你的并行事件没有设置等待时间,每帧都在自动处理你的事件页内容
所以你只能看到一个空的气泡,气泡没有播放完就马上开始从头播放
以及你没有追加事件触发的时机,按你这个写法,就算没有走到指定地点也是会出现气泡的
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-17 00:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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