KCDDP ADV综合创作站 » 高级技术区 » [KR视觉研究会]简单搞定图片关闭询问窗口(支持透明)^^[4.5修改]


2007-4-4 11:01 全局变量D
[KR视觉研究会]简单搞定图片关闭询问窗口(支持透明)^^[4.5修改]

[attach]13[/attach]
1.和制作右键菜单相同,先用KAG自行制作一个询问窗口~
例如说以下代码,新建一个exitframe.ks贴进去.(请保证有一张图片...= =b)
图片层等等自己随便改...

[code]
*start
;询问窗口打开中
[eval exp="tf.exitframe=true"]
[tempsave]
;记录当前状态,供返回时恢复原来的rclick等
[rclick jump="true" storage="exitframe.ks" target="*返回"]
[current layer="message1"]
[position layer="message1" frame="wakuwaku_2" visible="true" left=0 top=150]
[nowait]
[style align="center"]
[locate y=20]
确定要退出游戏吗?
[locate y=60]
[link exp="kag.shutdown()"]确定[endlink][r]
[resetstyle]
[style align="center"]
[link target=*返回]取消[endlink][r]
[resetstyle]
[endnowait]
[s]
*返回
[rclick enabled="false"]
[er]
[layopt layer="message1" visible="false"]
[tempload]
[eval exp="tf.exitframe=false"]
;询问窗口关闭
[return]
[/code]

2.在Mainwindow.tjs.762行开始,将function onCloseQuery()进行修改.
将自定义的调出yesnodialogue改为注释.
if(inStable)<=当"非安定中"的时候按关闭窗口将无反应.防止出现文字显示中途跳跃到询问框然后继续显示...|||
callExtraConductor('exitframe.ks', '*start');
基本的呼叫...
[code]
        function onCloseQuery()
        {

        saveSystemVariables();
        if(!askOnClose) { super.onCloseQuery(true); return; }
//        if (global.currentDialog === void) {
//            askYesNo("是否退出?", "确认", onCloseYes);
//        }
      if(!tf.exitframe && inStable){callExtraConductor('exitframe.ks', '*start');}
//询问窗口未打开且安定中时,打开询问窗口
        super.onCloseQuery(false);

    }
[/code]

没有经过仔细DEBUG.
优点当然是简单易用效果华丽...XDD
缺点可能是callExtraConductor只能用一层,因此如果是在使用了callExtraConductor的情况下打开窗口,之前的callExtraConductor将无效.
例如说用这种方式制作的SL系统打开中的时候关闭游戏,询问框返回后估计会返回平时游戏界面而不是维持在SL界面.

[[i] 本帖最后由 全局变量D 于 2007-4-5 19:53 编辑 [/i]]

2007-4-4 12:02 全局变量D
考完试回来抓狂的结果...= =b
总之还是老样子,等着高手改进吧XD

2007-4-7 10:13 laputachen
不错不错,我已经开始用上了。做了一些小改进,主要是窗口和BGM的淡出淡入:

*start
;询问窗口打开中
[eval exp="tf.exitframe=true"]
[tempsave]
[layopt layer="message0" visible="false"]

;询问窗口出现时调低BGM音量
[fadebgm volume=50 time=1000]
;记录当前状态,供返回时恢复原来的rclick等
[rclick jump="true" storage="exit.ks" target="*返回"]

;message1文字层出现前,淡入一个fg,此fg和message1的“frame”一样
@fg storage=exit1 l=0 t=0 time=500
[current layer="message1"]
[position layer="message1" frame="exit1" visible="true" left=0 top=0]
[nowait]
@font color=0x000000 size=20 bold=true edge=true edgecolor=0x666666
[locate x=200 y=150]
返回现实世界吗?
[locate x=230 y=190]
[link exp="kag.shutdown()" hint="意识流的世界太虚幻了。"] > 确定 [endlink][r]
[locate x=230 y=220]
[link target=*返回 hint="但现实又比虚幻要真实多少呢?"] > 取消 [endlink][r]
[resetstyle]
[endnowait]
[s]

*返回
;关闭窗口后BGM音量回复正常,cl清除前景层,message1层用text off淡出
[fadebgm volume=100 time=1500]
[rclick enabled="false"]
[er]
@cl
@text off time=700
[layopt layer="message1" visible="false"]

;tempload时,不重新载入BGM

[tempload bgm=false]
[eval exp="tf.exitframe=false"]
;询问窗口关闭
[return]

2007-4-7 10:21 laputachen
同理发现,返回标题的询问窗口一样能改,在mainwindow.tjs中function goToStartWithAsk那一段改为如下:

        function goToStartWithAsk()
        {
                // 最初に戻る(確認あり)
       // askYesNo("是否返回开始?", "确认", goToStart);
        // }
         callExtraConductor('title.ks', '*start');}

同样再编一个title.ks,把“确定”的link改为[link target=*title]

然后在“*返回”前加入一段即可:

*title
@fadeoutbgm time=300
[eval exp="tf.exitframe=false"]
[gotostart ask=false]
@s

在此返回标题询问窗出现时,貌似点关闭是没反应的……

2007-4-9 17:40 全局变量D
就是为了保证这些窗口不互相冲突...所以用一个临时变量判断窗口的打开状态.如果打开中的话其他同类窗口无效...
所以拉普特同学如果你要改的话记得把TITLE那里也加上当其他类似窗口打开中的时候,返回标题询问窗口禁止打开吧...
因为如果是在其他用callExtraConductor呼叫的系统里打开这个询问窗口,会出现虽然显示的图片仍然保留,但是RETURN到的地方肯定出现错误...(因为原来关于RETURN的记录已经自动清除了).<=和我预想中的"完全无视之前用callExtraConductor已经执行的代码,重新读入"还是有差别的.不过如果*return部分的代码都做得一模一样大概没问题?==b

如果除了callExtraConductor以外还有更接近于KAG的CALL指令的函数,这个问题应该就能解决了...
我试过processcall这个函数,但是这么做是连RETURN也无效...OTL
不过如果是对使用rclick做菜单的人,这个东西还是有点用的吧...:lol
因为具体效果是KAG的,所以修改相当方便的说.

正在研究用TJS写出同样的效果...目前还在搞不定按键后的反应...
...:L 应该也是要封装成类似YESNODIALOGUE一样的类吧...?
如果能完成的话就好了...我显然离这种境界还有差距OTL

2007-4-10 00:21 Miliardo
TJS么……你尝试用下KAG的那些Class如何……?

2007-4-11 18:34 全局变量D
=.=确切的说不用那些类就更不可能搞定了...
拿着那些类当范例慢慢磨啊磨...

2007-4-13 21:25 全局变量D
把那些TAG相关的东西搜索了一遍,但是没找到CALL对应的函数……= =

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.