THE NVL Maker

 找回密码
 成为开发者
搜索
查看: 901|回复: 5

[常见问题] 动态效果在刷新后就会停止以及对话记录时有时无的问题

[复制链接]

7

主题

18

帖子

0

精华

游戏开发者

积分
18
发表于 2018-12-29 18:16:14 | 显示全部楼层 |阅读模式
D大您好!!之前好像有见过类似疑问(与动态效果有关)的帖子,可能是没有wact的关系……但在游戏进行过程中需要用到对话进行过程中持续循环的动态效果,所以不能在动态之后wact。

----
以下问题1:
如果在动态还在进行的时候打开三级界面然后返回,动态就会停止,还有tjs段落的效果也会被消去。这个问题该如何解决?
比方说对话过程中,背景是正反复开关的、使用了doblur来添加了模糊效果的电梯门,若在此时点开存档画面,存完后返回,电梯门就不动了,还从模糊状态变回了其原始状态。
png图文件比较占内存所以想尽量不多加图……能用代码解决的图像显示变化就用代码orz 见到有系统自带的模糊指令就用了,没想到会被三级界面的显示打垮。
----
问题2:
存档界面的对话记录有时会一片空白,连“……”都不显示。
这个问题以前没有的……是在用过一次文字渐变插件后开始时不时出现hhh
发现这点后赶紧尝试把插件相关文件和使用指令全部删除回到原先状态,但后来还是会有这个问题。
以及我有做新的对话框(在macro_play里),测试调用新对话框的时候,打开存档界面同样不会显示这个对话框里文字的对话记录。但nvl的初始对话框(对话、全屏、透明)都没有问题【当然这是在使用插件之前……
难道对话框也要在什么地方进行登陆吗?
同一个地方的对话,点击存档,有时能显示对话记录,有时就显示不出来。一切全看脸。
尝试添加了新的项目文件(模板),把插件用了进去,但是就不存在我自己那个项目的对话记录时有时无的bug。这么一说可能还是我自己的项目的问题?
找不到是哪个地方出了错……最基础的系统代码都没动过来着,插件代码也因为对tjs式太小白而很搞不出个所以然……
回复

使用道具 举报

12

主题

375

帖子

0

精华

管理员

Rank: 9Rank: 9Rank: 9

积分
396
发表于 2018-12-30 01:00:31 | 显示全部楼层
打开三级界面应该是经历了tempsave和tempload导致的效果丢失,一般来说应该原因是因为doblur是针对layer做的操作,在layer的onsave/onload时候没有被还原。
解决方法有三种,
1把效果写成类似下雨,下雪这样的kag插件,plugin类里面有专门的save/load执行的函数,只要写好这两个函数,是能自动恢复效果的。(正道)(感觉类似的插件应该会有人做过)
2使用特定变量来记录当前的场景,当返回菜单之前check一下对应变量,如果为真就重新把效果加上。(简单粗暴,适合只有少数场景需要用到特定效果的情况)
3在动态过程中禁止打开菜单(喂)

历史纪录的情况,如果没有做版本控制的话可能是还原得不彻底?不过也可能是从前没有发现。
历史纪录相关的指令只有history output一个,用来控制对话是否输出到历史纪录内。
还可能涉及的就是current layer用于设定当前的message层,没有测试过是不是只记录current的内容(应该不会?)。
NVL取得最近对话的方式是存档时保存额外的sf数组,存下历史纪录的kag.historyLayer.data[kag.historyLayer.dataPos-1]内容,在MySaveLoadFunction.tjs里面的SaveExtraInfo函数内实现。
可以看看是kag.historyLayer.data丢了,还是负责记录最近对话的那个sf数组有问题。
回复

使用道具 举报

7

主题

18

帖子

0

精华

游戏开发者

积分
18
 楼主| 发表于 2019-1-6 00:49:36 | 显示全部楼层
VariableD 发表于 2018-12-30 01:00
打开三级界面应该是经历了tempsave和tempload导致的效果丢失,一般来说应该原因是因为doblur是针对layer做 ...

谢谢D大,历史记录的麻烦解决大半了!竟然是很简单的output的问题orz
好像和事件测试有点关系……大概是output只在进入游戏时开,所以在事件测试时就不会显示记录。可是以前在用事件测试的时候存档里还是能有对话记录(虽然历史记录会一片空白)……莫非是我记错了?
把那句history output=ture删掉然后重新输入了一遍,突然就一切正常了哈哈哈

现在能准确锁定对话记录会在什么时候消失:
普通对话框一切正常。
使用透明框和全屏框的时候,出现的第一段话(以换行等待lr为结尾)无法显示在对话记录里,得等点击进行到第二段话时,对话记录里才会出现上一段话的内容(不是最新的第二段话);
而如果正在显示的这句话前面带了个换行r(也就是空了一行),对话记录才能准确地显示出最新进行到的这段话。


接着是动态暂停的问题
目前想法是先试一下方法2。毕竟为了让演出效果不要太干瘪肯定会经常用action,方法3粗暴过头了不敢这么搞哈哈…… 1感觉不太能懂,操作起来似乎很难的样子(挠头
关于定变量的方法,先测试了一下但没有变化,不知道是不是用错了变量,不过f、tf、sf都试过了,感觉搞错了的应该在别的地方……
大概是剧情里有这么一段脚本:
  1. @action time="20000" zoom="150" layer="0" module="LayerNormalZoomModule"
  2. @if exp="(f.动态>=1)"
  3. @action time="20000" zoom="150" layer="0" module="LayerNormalZoomModule"
  4. @endif
复制代码

然后三级界面的返回都直通main_menu嘛,于是跑去main_menu的标签*返回下面加了一行,就变成这样:
  1. *返回
  2. [locklink]
  3. [rclick enabled="false"]
  4. [backlay]
  5. [tempload backlay="true" bgm="false" se="false"]
  6. [trans method="crossfade" time=200]
  7. [wt]
  8. [eval exp="f.动态+=1"]
  9. [unlocksnapshot]
  10. [return]
复制代码

没有任何反应。
猜是eval那一句的问题……

很抱歉有这么多小白疑问!实在是打扰D大了!希望D大有空的时候再来看方不方便回复一下这个。
本职不是编程所以程序方面非常小白,水螅大大的基础教程解决了我不少问题但作为菜鸟总是会被一些奇奇怪怪的细节绊倒otz
回复

使用道具 举报

12

主题

375

帖子

0

精华

管理员

Rank: 9Rank: 9Rank: 9

积分
396
发表于 2019-1-11 17:56:16 | 显示全部楼层
定变量应该是这样的:
剧情里:
[eval exp="f.动态1=true"]
动态效果指令
动态结束
[eval exp="f.动态1=false"]
界面里:
*返回
……
[if exp="f.动态1==true"]
动态效果
[endif]
[return]
回复

使用道具 举报

12

主题

375

帖子

0

精华

管理员

Rank: 9Rank: 9Rank: 9

积分
396
发表于 2019-1-11 17:59:22 | 显示全部楼层
这样的历史纪录那个看起来偶然空白是正常的哦。
因为只有走到[w]才会进行历史记录,或者记录的正好是r那一行(换行空白)
当然想改也有办法,就是存档的时候加一行如果对应历史记录kag.historyLayer.data[kag.historyLayer.dataPos-1]是空白行,就继续往上追溯一行变成kag.historyLayer.data[kag.historyLayer.dataPos-2]。
回复

使用道具 举报

7

主题

18

帖子

0

精华

游戏开发者

积分
18
 楼主| 发表于 2019-2-22 18:59:21 | 显示全部楼层
VariableD 发表于 2019-1-11 17:59
这样的历史纪录那个看起来偶然空白是正常的哦。
因为只有走到[w]才会进行历史记录,或者记录的正好是r那一 ...

谢谢D大解答!对不起最近才得空上论坛orz
试着专门添加了一个记录动态的文件,每次返回就call一下,已经解决了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 成为开发者

本版积分规则

Archiver|手机版|nvlmaker

GMT+8, 2019-5-25 10:51 , Processed in 0.028760 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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