社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 道具中心
主题 : 从零开始学NS时碰到的小问题总结
rosina 离线
级别: ①新人
显示用户信息 
0  发表于: 2009-12-01   
来源于 NS 分类

从零开始学NS时碰到的小问题总结

虽然N年前看过一下NS,可是真正铁了心学习NS是上周的事情。由于是从零开始(没有任何电脑编程基础),绕了不少弯路。

花了三天时间,总算把基本的一些功能摸清楚了。

我想做的游戏是一个类似《FATE》的文字小说游戏,脚本和支线流程已经做好,功能比较简单,也想把自己在摸索过程中的一些问题记录下来,在这里分享。我想和我一样从零开始学NS的人应该不在少数,希望能有点帮助,也希望这里的前辈能不吝指点当中的谬误,谢谢。

一、对话框
1. 预先定义对话框的格式

这个游戏中,有常用的对话框、字速快的对话框、大字对话框这三种。开始的时候,每次出现对话框我都要打上setwindow那一长串东西……后来发现,是可以先定义的。

在0.txt的define区,可以先把这三种对话框先定义,这样,在游戏中就可以直接输入代码了。

*define
defsub frame;一般对话框
defsub frame1;大字对话框
defsub frame2;迅速字对话框
;=====对话框设定
game
*frame
setwindow 30,150,30,3,17,17,0,2,80,1,1,":a;other\frame.jpg",0,118
return
*frame1
setwindow 30,150,16,2,28,28,0,2,80,1,1,":a;other\frame.jpg",0,118
return
*frame2
setwindow 30,150,30,3,17,17,0,2,300,1,1,":a;other\frame.jpg",0,118
return

defsub写在define区,具体的定义在game下面,放在游戏本体前。

比如,在游戏中我要显示这么个东西:



没有定义的话,写成:
setwindow 30,150,30,3,17,17,0,2,80,1,1,":a;other\frame.jpg",0,118
今天阳光明媚,
东方司令部新的一天开始了。\

作出了定义,就可以直接用frame来代替那串:
frame
今天阳光明媚,
东方司令部新的一天开始了。\

2. 关于对话框字数的测算
我在PS里面,新建一个和游戏屏幕大小一致的画布,先在上面画好对话框,再用文字工具测量大概可容纳多少个字。

3. 关于半透明的对话框
对话框用工具转成阿尔法透明图后,把右边需要半透明的黑色部分替换成X%的黑色(如50%黑),那样就会呈现半透明效果,如下图:



4. 关于显示对话的主人
游戏的文字默认颜色是白色,我设定对话主人的显示颜色是蓝灰,这个也可以在define区先定义格式:

*define
defsub riza
defsub louis
defsub roy
game
*riza
#B3E9FF【中尉】#ffffff
return
*louis
#B3E9FF【阿姆斯特朗少佐】#ffffff
return
*roy
#B3E9FF【大佐】#ffffff
return

要特别注意:不要忘记“return”。

这样就可以用代码roy来代替#B3E9FF【大佐】#ffffff这一长串……
[ 此帖被rosina在2009-12-01 13:23重新编辑 ]
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
人格问题专属伪程序员
wildgun 离线
级别: ②入门
显示用户信息 
1  发表于: 2009-12-04   
如果真的要做出类似Fate特效的话,建议不要用NS。

曾经试过,但做到Fate一开始卫宫士郎早上出门站在十字路口介绍家附近的街道时,需要实现几个地点图片的如下变化:

水平或垂直移动,从屏幕外移到屏幕内;α透明度从0渐变到255。

几个图层一叠加,移动起来引擎效率就很低了……
我的百度空间:hi.baidu.com/wildgun
rosina 离线
级别: ①新人
显示用户信息 
2  发表于: 2009-12-04   
to wildgun:不敢学Fate,只是想做那种类型的游戏,靠选择肢推动剧情前进啦。
现在只弄清楚了立绘显示、bg和最简单的lsp滚动  
周末回去继续努力
人格问题专属伪程序员
rosina 离线
级别: ①新人
显示用户信息 
3  发表于: 2010-01-06   
隔了一个多月再来接着写~

二、一些规范
其实这个“二”该放到第一点来写……我真是想到哪儿写到哪儿的西瓜皮典型。

NS的脚本从0.txt到99.txt。按顺序执行。你喜欢的话把所有脚本都放在0.txt里面也不是不行,但看起来太麻烦了,乱。还是分开来比较好。
1. *define
0.txt存放*define部分的脚本,例如:

引用
;NS里面的“;”,后面的文字一概不会起作用,可以用它来表示“注释说明”的开始。
;mode800;==这里设定了游戏屏幕的宽度,格式 ;modexxx (前面要带;)屏幕宽高比例4:3,一定是在*define之前的。
*define
defaultfont "字体" ;==一定是电脑系统里有的字体,如果不是太高要求的话,可以选用幼圆或黑体
clickstr ",。",1 ;==设定游戏对话框的文字,遇到什么标点的时候自动换页
caption "游戏标题" ;==游戏标题,显示在游戏屏幕标题栏的
deletemenu ;==把这个去掉,看看会出现什么~


接下来就可以写defsub了。defsub 定义一个指令,把原先一大串的代码简化。而具体这个指令指代什么,在*game后面记得设定

引用

defsub xxx;这里的“xxx”可以是英文字母、数字,都必须半角
defsub frame ;我通常会先定义对话框格式
defsub name ;还有定义“对话框角色名字”的颜色和文字。


2. game开头
接着,到game的部分。game一开始必须把你刚才在defsub里定义的指令具体说明。
游戏用nsa加密的话,也要写在game开头。
总之:define里面的代码定义、nsa,是必须写在game最开头,游戏正式开始之前。
我把这些写在1.txt,如果你的代码定义较多,可以分开多个txt写。


引用

nsa; 用nsa软件加密图片音乐素材后必须加上,写在game上面一行,没有加密的话就忽略
game

注意:game前面没有*

引用

*xxx
#B3E9FF【某人】#ffffff
return

*和return中间的部分,就是把defsub xxx里面的这个“xxx”代表什么写出来。#B3E9FF这些是文字颜色代码,可以用PHOTOSHOP的颜色盘来看。

引用

*frame
setwindow 30,150,32,3,17,17,0,2,80,1,1,":a;bg\frame.jpg",0,118
return

这里定义的是我对话框形式。具体代表啥请参考说明书(殴)

下一次写*start部分吧,包括OP画面、存取设置……
[ 此帖被rosina在2010-01-06 12:04重新编辑 ]
人格问题专属伪程序员
天城梓 离线
级别: ①新人
显示用户信息 
4  发表于: 2013-02-05   
回 3楼(rosina) 的帖子
現在NS其實是可以使用PNG檔的
secondsen 离线
级别: 总版主
显示用户信息 
5  发表于: 2013-02-05   
LZ三年前写的东西。。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
描述
快速回复

认证码:

验证问题:
22-5=?,答案:17 正确答案:17
按"Ctrl+Enter"直接提交