幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 11356|回复: 13

[NS] [原创]NScripter全攻略:Level 7 LSP的混沌宇宙(3) 用EXBTN升级

[复制链接]

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2007-9-11 14:20:47 | 显示全部楼层 |阅读模式
知道这叫啥么,这叫回光返照,
这么勤奋的更新只意味着我会更长久的弃坑……
------------------------------------------------------------------------------------------

邪恶之诅咒:
盗帖者全家死光光
无端转载者出门被狗咬

假如获得转载授权,转载同时请贴出本人签字画押授权书。
本教程已在国家R界专利局申请专利,禁止任何形式的侵犯版权行为。

作者联系方式:
fs_countd@126.com


以下内容需要积分高于 0 才可浏览

Level 7 LSP的混沌宇宙(3) 用EXBTN升级你的系统画面

相关指令:
exbtn
相关格式:
exbtn的参数格式

嗯,这次大概就只能讲exbtn指令了吧。
在游戏中,涉及按钮悬停效果的,除了上一讲说过的使用lsp显示图片并用spbtn定义按钮外,当鼠标移动到某按钮上时,一般还有以下两种效果。
1、播放音效
2、在某个位置显示图片,并当鼠标从按钮上移开时图片消失。

熟悉了按钮的使用以后,以普通的悬停效果,加上以上两种效果,就可以制作出相当复杂的系统了。当然,单纯做个华丽点的标题画面更没有问题。
这种情况下不附上范例真是不行咧,所以大家就暂时参考《青空之想试玩II》的游戏系统吧(顺便打个广告)。游戏中的option系统和物品系统就大量应用了exbtn制作的效果。当然青空是不能给你拆的(=_=b),但是看完这讲之后,你也可以试试制作类似的系统了。

首先是使用exbtn达成和spbtn一样的悬停效果,这是为了可以在这个基础上进行扩展。
  1. *define
  2. game
  3. *start
  4. lsp 11,":a/2,0,3;btn.jpg",305,252
  5. lsp 12,":a/2,0,3;btn.jpg",305,302
  6. lsp 13,":a/2,0,3;btn.jpg",305,352
  7. print 1
  8. btndef ""
  9. exbtn 11,1,"P11,1"
  10. exbtn 12,2,"P12,1"
  11. exbtn 13,3,"P13,1"
  12. btnwait %0
  13. if %0<=0 goto *start
  14. if %0==1 goto *newgame ;开始新游戏
  15. if %0==2 goto *loadgame ;读取进度
  16. if %0==3 goto *endgame ;结束游戏
  17. *loadgame
  18. systemcall load ;呼叫NS的读档选单
  19. goto *start
  20. *endgame
  21. end
  22. *newgame
  23. csp -1
  24. print 1
  25. 开始游戏\
  26. end
复制代码
参考下上次的代码,就可以看出,只是把
spbtn 11,1这样的指令,改成了exbtn 11,1,&quot11,1"而已。
前面的11,1依然代表一样的意思,而后面的第三个参数,使用""括起来的部分,就是exbtn的追加效果参数。
P11,1代表,当鼠标移动到图片lsp11上时,将显示图片lsp 11的第1格。
注意,由于我们之前的设定,lsp11的图片是被分成了两格,而格数是从零起算的,平时显示的就是第0格,因此这里第1格就是特殊效果了。(如果是文字的话,自然就代表选中的文字颜色了)
显示多格的图片时,需要指定图片编号和格数,两者之间用逗号隔开。但当图片没有分格,或是单色文字的时候,就只需要指定编号了。

那么,再试试加上音效播放效果吧。

找一个wav文件(这里起名叫xd.wav)放到文件夹里,然后把
exbtn 11,1,&quot11,1"
修改成
exbtn 11,1,&quot11,1S1,(xd.wav)"

运行游戏,是不是当鼠标移动上去的时候,可以听到音效呢?

然后,加上其他图片的显示及消失效果
范例:当鼠标移动到图片lsp12 上时,将会在画面的左边显示lsp文字“读取游戏”。
加上在lsp11按钮添加音效的修改,代码变成如下这样:
  1. *define
  2. game
  3. *start
  4. lsp 11,":a/2,0,3;btn.jpg",305,252
  5. lsp 12,":a/2,0,3;btn.jpg",305,302
  6. lsp 13,":a/2,0,3;btn.jpg",305,352
  7. lsph 14,":s/25,25,0;#ffffff读取游戏 ",205,302
  8. print 1
  9. btndef ""
  10. exbtn 11,1,"P11,1S1,(xd.wav)"
  11. exbtn 12,2,"P12,1P14"
  12. exbtn 13,3,"P13,1"
  13. btnwait %0
  14. if %0<=0 goto *start
  15. if %0==1 goto *newgame ;开始新游戏
  16. if %0==2 goto *loadgame ;读取进度
  17. if %0==3 goto *endgame ;结束游戏
  18. *loadgame
  19. systemcall load ;呼叫NS的读档选单
  20. goto *start
  21. *endgame
  22. end
  23. *newgame
  24. csp -1
  25. print 1
  26. 开始游戏\
  27. end
复制代码

注意,这里增加了一个默认不显示的精灵,lsp 14。

实际测试,效果是出现了,问题也来了。
虽然当移动上去时,文字显示了,但是当鼠标从按钮上移动开之后,文字还留在那……
那是因为,虽然设定了“鼠标在按钮上时执行的效果”,却没有定义“鼠标不在任何按钮上时的效果”。
Ns为此提供了exbtn_d这一指令,用来定义当鼠标不在任何按钮上时,画面的显示。
由于我们需要的是鼠标移开之后14号精灵消失,因此改写成这样:
  1. *define
  2. game
  3. *start
  4. lsp 11,":a/2,0,3;btn.jpg",305,252
  5. lsp 12,":a/2,0,3;btn.jpg",305,302
  6. lsp 13,":a/2,0,3;btn.jpg",305,352
  7. lsph 14,":s/25,25,0;#ffffff读取游戏 ",205,302
  8. print 1
  9. btndef ""
  10. exbtn 11,1,"P11,1S1,(xd.wav)"
  11. exbtn 12,2,"P12,1P14"
  12. exbtn 13,3,"P13,1"
  13. exbtn_d "C14"
  14. btnwait %0
  15. if %0<=0 goto *start
  16. if %0==1 goto *newgame ;开始新游戏
  17. if %0==2 goto *loadgame ;读取进度
  18. if %0==3 goto *endgame ;结束游戏
  19. *loadgame
  20. systemcall load ;呼叫NS的读档选单
  21. goto *start
  22. *endgame
  23. end
  24. *newgame
  25. csp -1
  26. print 1
  27. 开始游戏\
  28. end
复制代码

可以看出来,
exbtn_d "C14"是唯一增加的部分。
也就是说,字母P代表显示,而C则代表消失,S则代表播放音效。
以上这三个参数是可以不断叠加的,例如说,要为所有按钮增加播放音效和文字注释效果。可以写成以下这样:
  1. *define
  2. game
  3. *start
  4. lsp 11,":a/2,0,3;btn.jpg",305,252
  5. lsp 12,":a/2,0,3;btn.jpg",305,302
  6. lsp 13,":a/2,0,3;btn.jpg",305,352
  7. lsph 14,":s/25,25,0;#ffffff开始游戏 ",205,252
  8. lsph 15,":s/25,25,0;#ffffff读取游戏 ",205,302
  9. lsph 16,":s/25,25,0;#ffffff离开游戏 ",205,352
  10. print 1
  11. btndef ""
  12. exbtn 11,1,"P11,1P14S1,(xd.wav)"
  13. exbtn 12,2,"P12,1P15S1,(xd.wav)"
  14. exbtn 13,3,"P13,1P16S1,(xd.wav)"
  15. exbtn_d "C14C15C16"
  16. btnwait %0
  17. if %0<=0 goto *start
  18. if %0==1 goto *newgame ;开始新游戏
  19. if %0==2 goto *loadgame ;读取进度
  20. if %0==3 goto *endgame ;结束游戏
  21. *loadgame
  22. systemcall load ;呼叫NS的读档选单
  23. goto *start
  24. *endgame
  25. end
  26. *newgame
  27. csp -1
  28. print 1
  29. 开始游戏\
  30. end
复制代码

注意这里P/C/S之前反而不用逗号分隔。

嗯,有些BT人可能会想到,当游戏的一个画面里涉及到数十张图片的显示和消除的时候,这么写一定很容易让人想死……

幸好NS还提供了简写功能:
exbtn_d "C14-16"和exbtn_d "C14C15C16"是等效的。

另外,由于exbtn所带的参数自然可以用文字变数代替,可以考虑先把这些P啊C啊S的全部加到一个变数(例如$name)里,最后使用exbtn 11,1,$name就能搞定。
如果你擅长使用循环和条件的话,简化过程就更容易了。(啥?循环和条件是啥?……这不是今天的内容!)

本日小贴士:
那么让我们来YY吧。
Q:lsp的应用范围?
A:标题,选项,系统设定,系统按钮,右键菜单,存储读取,地图,小游戏……
显示图片、显示按钮、根据玩家选择进行操作,这是所有游戏系统的基础~
与其询问别人怎么做,不如自己思考一下。
当然,如果是自制右键菜单、对话系统按钮和存取,这还要配合NS提供的一些系统类指令进行,这不是今天的内容……(跑……)

Q:动画按钮怎么做?按钮都是静态的吧?
A:用exbtn制作透明按钮,当不在按钮上时显示普通的lsp动画一张,在按钮上时显示选中的lsp动画一张。^^

Q:我要怎么移动、放大、缩小、旋转图片?
A:虽然实际效果不太理想,但Drawsp 系列指令可以制作简单的动态效果,那啥,下,下,下一讲……(已经不知道下几讲才能讲完了OTL)


http://www.nvlmaker.net/
回复

使用道具 举报

1

主题

6

帖子

68

积分

②入门

积分
68
发表于 2007-9-11 18:30:24 | 显示全部楼层
谢谢D大的讲觧!
D大的讲座都很容易明白耶~
我就是看到D大的讲座才一頭埋進這個NS世界的~ [s:1]

弃坑?啥?沒看到~ 請D大繼續努力填坑[s:4]
加油!
回复 支持 反对

使用道具 举报

1

主题

6

帖子

68

积分

②入门

积分
68
发表于 2007-9-16 18:38:06 | 显示全部楼层
继续学习................继续支持某D的贡献~(今天把1-7都看了,但是并非完全练习了呢~由于工具缺少了几个,PHOTO-SHOP啊~什么的,恩,还要更多的实际操作才行吧~ [s:4]
回复 支持 反对

使用道具 举报

36

主题

996

帖子

350万

积分

⑧专业

积分
3507413
发表于 2007-9-16 20:25:14 | 显示全部楼层
呀呀~都到level7了~~虽然现在不用ns了~不过当初也是跟着D学了很多阿~飘过来支持下~~
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2007-9-16 20:48:57 | 显示全部楼层
我只想快点把这东西讲到完结,然后彻底放手... [s:6]
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

36

主题

996

帖子

350万

积分

⑧专业

积分
3507413
发表于 2007-9-16 20:55:43 | 显示全部楼层
这个……究竟什么程度算完结呢…………貌似日文版还有一些中文版没有的新指令……||||
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2007-9-16 21:32:04 | 显示全部楼层
本来这个教程的目的就不在指令……而在怎么组合。
如果要讲指令的话就列表了……

目前来说剩下的:
变量,循环,条件分歧的使用。
以上原理应用于图片相关的东西,还有变量和分歧用来制作二周目系统的问题。
最后是自制右键菜单和系统按钮。

目标是人人都能写电子小说吧。=.=b
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

36

主题

996

帖子

350万

积分

⑧专业

积分
3507413
发表于 2007-9-16 21:42:06 | 显示全部楼层
组合的话…………那就没完没了了……|||||话说我觉得现在的程度不是应该已经能写电子小说了么……
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2007-9-16 22:56:50 | 显示全部楼层
我当然是不会打算向犬与猫那种组合发展...
只是基本的自制菜单还是要教一下.
至少要把那些天天问的"怎么做到带截图的存储系统"之类的问题解决掉
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

1

主题

19

帖子

208

积分

③业余

积分
208
QQ
发表于 2007-9-16 23:23:42 | 显示全部楼层
[s:5] 我努力在美工区实现的目标是:人人都能做基本人设………………
有D真好啊 [s:6] 要我去写代码会疯掉的…………
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 15:59 , Processed in 0.029918 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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