宾少 发表于 2008-6-11 17:52:46

关于论坛范例游戏中的一点疑问~(解决拉)

我宾少又回来了~我下了论坛的范例游戏,看了下,有好多不懂的地方,所以来请教~
@macro name=lform
;这里就是macro的使用。当在脚本里写入时就会执行从@macro name=lform到@endmacro之间的代码,macro里不能用iscript和标签。
;这个macro的作用是根据日期变量改变上方日期栏的图片
@image layer=25 page=back storage="form0" visible=true left=0 top=0 opacity=255
;这一句将该层置于所有层上边
@pimage layer=25 page=back storage="w1" visible=true dx=50 dy=61 opacity=255 cond="f.周 == 1"
........
1.上面的那些段字,它说:"这一句将该层置于所有层上边!"这个图层不是有27层呢?这句话是什么意思呢?PS:他设置了27层~
2.还有,@image layer=25 page=back storage="form0"...........page不是应该设为pore吗?这个怎么设置成back了?具我所知,back应该不显示的吧.(因为基础教程中,没有对这个有介绍过,而且官方汉化的那个说明,也讲得不清不楚的)
3.method这个有3个参数crossfade\scroll\universal~请问这3个参数,分别是什么意思?
4.@move layer=17 time=300 path="(57,430,255)"
      这个WM是什么意思呢?
5.比如说:我在A.KS中用call 调用一个宏,如果我转到B.KS或者其他的地方,那个宏命令是否还有用呢?
6.默认字显示的时候,是一个字一个字的出来.如何能使字出来的时候,就播放一个声音,就象打字机一样~
7.最重要的一个问题了:我已经弄好了1-31号的数字,还有年/月/日等等,如何做一个完整的日历出来呢?每月的日期都不一样,1月有31号,2月有28号........要怎么设置才能象现实中的一样?
   如何给日期定一个变量呢?就是能操控日期,比如说,我在游戏中做了一件事情,这件事情要耗费15天的时间~然后我也这个变量+15,日历上就自动加上15天了......能不能给个思路呢?

ravenex 发表于 2008-6-12 03:01:16

wm是wait move
page=fore/back的问题,看看后面的代码里有没有trans
trans里method就是前层图像到后层图像的变换方式,
- crossfade是渐变,
- scroll是滚动,通过from参数来指定是从哪边开始滚动(上下左右/top、bottom、left、right)
- universal是任意渐变,通过rule参数来指定渐变的规则图

日期的问题使用Date类。Date类的构造函数如下:
new Date();
new Date(<日期字符串>);
new Date(<年>, <月(0~)=0>, <日=1>, <时=0>, <分=0>, <秒=0>);
第一种是得到一个代表当前时间的Date对象,第二个是解析一个类似"2008/06/12 02:31:00"之类的字符串来创建Date对象,第三个是分别指定Date对象的年月日时分秒等参数。

假如创建了一个Date对象,Date d = new Date("2008/09/10 00:00:00");
接下来要给它加15天,只要d.setDate(d.getDate()+15);就行。

楼主大大的日历每次要显示的时候都从这么一个Date对象读取,每次你改变Date对象的值的时候紧接着让日历重新读一次数据就行。

要在字显示的时候输出声音要继承MessageLayer,并覆盖processCh(ch)函数。
function processCh(ch) {
    super(...);
    // 在这里加入播放声音的代码
}

宾少 发表于 2008-6-12 10:15:32

谢谢楼上的大大~
1.那个page=fore/back的.代码里有写
@trans method=crossfade time=600
@wt
加上这个也只是有渐变效果吧!难道能让里页显示出来吗?那么说,里页的显示,要用trans命令才能显示的吧~没错吧?
2.那个第5个问题,没有回答哟~
3.关于您说的那个日历,我只是新手,看不懂您说的那些哟

ravenex 发表于 2008-6-12 16:29:18

trans就是将back页的内容变化到fore上。请阅读文档。
控制流的问题让D大大或者船长大人来回答,小的不敢乱说
日历的问题有别的办法解决,可以不用那么多TJS。但是不方便。楼主大大学点TJS好哈?

宾少 发表于 2008-6-12 17:33:12

引用第3楼ravenex于2008-06-12 16:29发表的:
trans就是将back页的内容变化到fore上。请阅读文档。
控制流的问题让D大大或者船长大人来回答,小的不敢乱说
日历的问题有别的办法解决,可以不用那么多TJS。但是不方便。楼主大大学点TJS好哈?
那个小的的观念是,只要不是必须学TJS的话,尽量避免~
外号一下:TJS好学吗?-_-

sarah707 发表于 2008-6-12 23:18:46

1.语误,只是单纯的那层比其他层靠上的意思
2.trans是把后层的内容通过指定的方式复制到前层
3.R大讲过了
4.同上
5.没办法call一个macro……call只能call到标签……
如果你是说用call读入了一段代码里边有macro的定义,那么只要你之后不重新定义他,他都可以用
6.改messagelayer.tjs,或者找一段和你设置的文字速度同步的音效一直放
7.kag也可以,用if或者cond自己判断

ravenex 发表于 2008-6-13 03:43:23

6. 小的不建议修改直接MessageLayer类,那样太“危险”了,很难保证会不会破坏了原来的绘图逻辑。而制作与文字速度同步的音频太困难了,文字速度默认是可调整的,即便只有5段调节也得想办法处理,而且一直放只有在文字自动播放的时候才会有可接受的效果。
还是继承MessageLayer类,覆盖processCh(ch)方法靠谱些。新插入的音频播放部分从KAG原本的playse之类的处理程序抄过来就够用了。也就是这么一句:se[+elm.buf].play(elm);

7. 系统提供了的功能却不去使用(在KAG脚本中嵌入并使用TJS)而要自己走困难的路(单纯使用KAG脚本),小的觉着还是不方便。TJS作为一种入门的程序语言并不难学。如果先学习了C/C++/Java/C#/JavaScript/ActionScript,使用TJS几乎不需要额外的学习。但是反过来说,学习TJS并不要求上述基础,因为TJS比前面说的几种语言都简单。单纯为了能使用TJS而去学习Java绝对是本末倒置。

如果是使用TJS所提供的Date类,使用TJS也可以轻松地通过数组来完成工作。类似这样:
var 每月的天数 = ; // 记录每个月的最大天数
// TJS里数组的下标是从0开始的,所以开头放个0来占位

var 今天 = %[&quot;月&quot; =&gt; 1, &quot;日&quot; =&gt; 1]; // 记住剧情的“当前”日期

今天[&quot;月&quot;] = 6;
今天[&quot;日&quot;] = 12; // 任意改变当前日期的内容

function 对日期增加天数(日期, 增加量) { // 定义一个函数
    var 当前增量 = 增加量;
    while (true) { // 无限循环
      var 月 = 日期[&quot;月&quot;]; // 得到日期中“月份”的部分
      var 日 = 日期[&quot;日&quot;]; // 得到日期中“天”或者说“日”的部分
      if (日+当前增量 &lt;= 每月的天数[月]) { // 没超过月底的天数
            日期[&quot;日&quot;] = 日+当前增量; // 不改变月份,直接增加日期
            return 日期; // 返回结果
      } else {
            日期[&quot;月&quot;]++; // 先把月份自加一
            if (日期[&quot;月&quot;] &gt; 12) 日期[&quot;月&quot;] = 1; // 如果月份超过了12则复位到1
            当前增量 -= 每月的天数[月]-日; // 把多余的增量减下去
            if (当前增量 &lt;= 每月的天数[日期[&quot;月&quot;]]) {
                日期[&quot;日&quot;] = 当前增量; // 增加日期
                return 日期; // 返回结果
            } else {// 如果剩余的增量超过了下个月的天数
                当前增量--;
                日期[&quot;日&quot;] = 1;
                // 注意这个分支没有返回
            }
            // 如果增量使日期超过了下个月的天数怎么办?循环再检查一遍。这就是为什么要循环
      }
    }
    return 日期; // 永远不会运行到这里,安全起见写一句
}

对日期增加天数(今天, 55); // 调用这个函数,“今天”加上55天就变成8月6日
每行里面,// 之后的都是注释,不对被执行的代码造成影响。
小的故意把变量名和函数名都写成中文来说明问题。平时自己用还是最好把这些名字用英文写,习惯问题,写中文也不是不行。
上面的代码就是可以执行的TJS代码。不难吧。如果要更安全更好地处理还是用类比较好。但这样不用类,自己小心点也够用。

小的觉着要更方便得使用KR的各种功能,学习哪怕一点TJS还是很有好处和必要的。

sarah707 发表于 2008-6-13 10:32:13

学tjs是很方便,但是我初学的时候对tjs在kag里边的嵌入经常茫然,对class更加茫然,也就是学了一段时间才开始对tjs有点明白,开始直接用tjs来写界面和计算,如果是初学者而且没有C/C++/Java/C#/JavaScript/ActionScript基础的话,我觉得先了解kag就够了,同时去了解kag和tjs会造成混乱的吧。
不过当然,这只是个人看法,如果做变量控制的确tjs比kag方便很多,kag本来也就是用eval调tjs式来进行变量计算的

宾少 发表于 2008-6-15 12:52:08

谢谢楼上的几位大大.我现在就只有日历那个问题了~
R大,您写的那个TJS例子好象不行~
那个难道非要真的学点TJS不吗?那有没有TJS的教程,我去学点. 谢谢拉~

CountD 发表于 2008-6-15 14:50:34

http://kcddp.keyfc.net/bbs/viewthread.php?tid=136&extra=page%3D1
13楼日历系统……
用KAG就能搞定了。-—-
页: [1] 2
查看完整版本: 关于论坛范例游戏中的一点疑问~(解决拉)