幻想森林

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

[NS] 几个代码求助

[复制链接]

4

主题

10

帖子

108

积分

③业余

积分
108
发表于 2009-5-11 16:35:23 | 显示全部楼层 |阅读模式
1.看过伪圣书后,对于defsub和getparam不太理解呢......
2.还是右键问题....那个繁体的看不懂(乱码)呢......
回复

使用道具 举报

0

主题

3

帖子

29

积分

②入门

积分
29
发表于 2009-5-11 17:08:05 | 显示全部楼层
额 勉强解释一下吧  
defsub使用在*define 和game间
是一个自定义指令的命令

比如说
你的主角叫 路人
为了在游戏中输入这个名字
你可以这样定义

defsub luren ; 路人
后面的是注释 ,写命令的时候建议写上,不然有可能搞忘
然后在后面这样修改人物名字设定及颜色改变

*luren
#ffffaa【路人】#A4F0A4

在后面写脚本的时候

比如说写到对话的时候
就可以用
luren
今天天气真好啊。

在游戏中显示出来就是
路人
今天天气真好啊。

这个命令很灵活。
有很多用处。
还可以 在用到setwindow的时候

;对话框设定
*window
setwindow 33,365,26,5,20,20,2,4,50,1,1,":l;pic\\kuang.bmp",8,345
return

把整个命令定义成
*window

在后面的文档中直接使用window

--------

getpram
额,这个要怎么解释呢。
o(╯□╰)o 我也不是很清楚

至于右键的问题,你想做什么?是自定义的右键菜单。
额,其实如果你真的要做游戏的话,我觉得这个可以先放在后面点,先把游戏的框架,大概剧情做出来再说右键自定义菜单这些美化什么的。
毕竟NS自带系统菜单,我觉得可以先做游戏,做个大概出来(那么多变量,修改,调试,好感度,等等等等),后期再做这种东西。
先把精华帖子和其他的帖子多看看 多理解 多实验吧

以上
使用技术手段突破一切障碍!
回复 支持 反对

使用道具 举报

4

主题

10

帖子

108

积分

③业余

积分
108
 楼主| 发表于 2009-5-11 17:28:16 | 显示全部楼层
*define

;-----各种初期设定-----

caption "System Customization Sample"
versionstr "System Customization Sample","自由挪用改变"

nsa
effectcut
;transmode alpha
clickstr "。!?」",2
;defaultfont "MS Gothic"
rubyon 10,10;,"MS Gothic"
savedir "savedata"
maxkaisoupage 15
lookbackcolor #c8c8ff
defaultspeed 50,25,0
menusetwindow 21,21,0,10,1,1,#666666
selectcolor #ffffff,#666666
windoweffect 10,250

filelog
labellog
globalon

;kidokuskip

resetmenu
insertmenu "终了",END
insertmenu "情报",VERSION
insertmenu "已读跳过",SKIP
insertmenu "画面",SUB
insertmenu "全画面",FULL,1
insertmenu "视窗",WINDOW,1
insertmenu "文字设定",SUB
insertmenu "表示量",SUB,1
insertmenu "通常",CLICKDEF,2
insertmenu "页数单位",CLICKPAGE,2
insertmenu "显示速度",SUB,1
insertmenu "慢速",TEXTSLOW,2
insertmenu "正常",TEXTMIDDLE,2
insertmenu "高速",TEXTFAST,2
insertmenu "字型",FONT,1


effect 2,6,250
effect 3,7,250
effect 4,8,250
effect 5,9,250
effect 6,6,500
effect 7,7,500
effect 8,8,500
effect 9,9,500
effect 10,6,1000
effect 11,7,1000
effect 12,8,1000
effect 13,9,1000
effect 14,10,1000
effect 15,10,500
effect 16,10,250



;-----Alias定义-----

;使用变数编号领域。
    mov %0,150    ;数字变数
    mov %1,150    ;文字变数

;好好使用变数
    ;数字变数  座标
        numalias x,%0:inc %0
        numalias y,%0:inc %0
    ;数字变数  按钮Return值
        numalias BtnRes,%0:inc %0

;选项Customization用
    ;数字变数  选项之数
        numalias TextSelectionNum,%0:inc %0
        numalias TextSelectionPitchY,%0:inc %0
    ;数字变数  必要的TextWIndow数值
        numalias TextWindowFontSizeY,%0:inc %0
        numalias TextWindowFontPitchY,%0:inc %0

;Click等待Icon的Alias定义
    ;定数  Click等待Icon的Sprite编号
        numalias TextCC1SpNum,801
        numalias TextCC2SpNum,802

    ;数字变数  Click等待Icon的文字传送、改页判定用
        numalias TextCC12Flug,%0:inc %0

;csp命令定义
    ;数字变数  csp命令叁变数
        numalias CspParam,%0:inc %0
        defsub csp


humanz 900    ;立缯Sprite900号之下显示
windowback    ;TextWindow在立绘以上显示


textgosub *text_cw    ;文字?页传送Subroutine指定




;-----按钮Weight用-----
usewheel    ;MouseWheel判定
useescspc    ;Esc,SpaceKey判定



game


;-----TextWindowSubroutine-----
*textset_01
rmode 1
texton
setwindow 40,30,30,15,24,24,0,9,20,0,1,#666666,0,0,800,600
return

;-----TextWindowSubroutine2(透明/右Click禁止/正文显示禁止)-----
*textset_02
rmode 0
setwindow 40,30,30,15,24,24,0,9,20,0,1,#ffffff,0,0,800,600
return



;==========System Customized Block==========

;-----csp-----
*csp
getparam %CspParam

if %CspParam=-1 _csp -1:lsph TextCC1SpNum,":1/3,160,2;sys/cursor0.bmp",0,0:lsph TextCC2SpNum,":1/3,160,2;sys/cursor1.bmp",0,0:lsph 98,":c/2,0,3;sys/down.jpg",770,570:lsph 99,":c/2,0,3;sys/up.jpg",770,5:return

_csp %CspParam:return




;-----Click等待Subroutine-----
*text_cw

getcursorpos %x,%y    ;Cursor位置取得
ispage %TextCC12Flug    ;Click等待or改页的判别

;将TextWindow在Effect时也显示
erasetextwindow 0

;Click等待Icon表示
if %TextCC12Flug=0 amsp TextCC1SpNum,%X,%Y+7:vsp TextCC1SpNum,1
if %TextCC12Flug=1 amsp TextCC2SpNum,%X,%Y+7:vsp TextCC2SpNum,1

print 1

btndef clear    ;按钮定义Clear
getenter    ;EnterKey受付




;-----Click等待按钮Loop-----
*text_cwlp
saveon    ;Save可
getcursor
textbtnwait %BtnRes    ;Click等待按钮Weight

;输入判定
if %BtnRes=0 goto *text_cw_next    ;左Click
if %BtnRes=-42 goto *text_cw_next    ;↓
if %BtnRes=-3 goto *text_cw_next    ;????下
if %BtnRes=-11 goto *text_cw_next    ;Space
if %BtnRes=-19 goto *text_cw_next    ;Enter
if %BtnRes=-1 getscreenshot 80,60:gosub *text_cw_rclk:goto *text_cw    ;右Click
if %BtnRes=-10 getscreenshot 80,60:gosub *text_cw_rclk:goto *text_cw    ;Esc

if %BtnRes=-2 gosub *text_cw_lookback:goto *text_cw    ;????上(回想)
if %BtnRes=-40 gosub *text_cw_lookback:goto *text_cw    ;↑
;(这里尤其没看懂)



;以外的输入会Loop
goto *text_cwlp




;-----Click等待到左Click-----
*text_cw_next
;Click等待Icon的非表示
vsp TextCC1SpNum,0:vsp TextCC2SpNum,0
print 1

texec    ;改页等待的场合Text消去

;将TextWindow在Effect时非显示
erasetextwindow 1

return




;-----Click等待到右Click-----
*text_cw_rclk
;Click等待Icon的非表示
vsp TextCC1SpNum,0:vsp TextCC2SpNum,0
print 1
gosub *rmenu_custom
return



;-----回想------
*text_cw_lookback

vsp TextCC1SpNum,0
vsp TextCC2SpNum,0
print 1

gosub *backlog

return


;-----选项(6个对应)-----
*customsel
skipoff
texton
getcselnum %2
getcursorpos %0,%1
btndef clear
cselbtn 0,1,%0+24,%1+10:if %2=1 goto *csel_lp
cselbtn 1,2,%0+24,%1+45:if %2=2 goto *csel_lp
cselbtn 2,3,%0+24,%1+80:if %2=2 goto *csel_lp
cselbtn 3,4,%0+24,%1+115:if %2=2 goto *csel_lp
cselbtn 4,5,%0+24,%1+150:if %2=2 goto *csel_lp
cselbtn 5,6,%0+24,%1+185:if %2=2 goto *csel_lp

*csel_lp
getcursor
selectbtnwait %BtnRes
if %BtnRes=1 cselgoto 0
if %BtnRes=2 cselgoto 1
if %BtnRes=3 cselgoto 2
if %BtnRes=4 cselgoto 3
if %BtnRes=5 cselgoto 4
if %BtnRes=6 cselgoto 5
if %BtnRes=-1 getscreenshot 80,60:gosub *rmenu_custom:goto *customsel
if %BtnRes=-10 getscreenshot 80,60:gosub *rmenu_custom:goto *customsel
if %BtnRes=-2 gosub *text_cw_lookback:goto *customsel
if %BtnRes=-40 gosub *text_cw_lookback:goto *customsel


goto *csel_lp


;-----右ClickMenu-----
*rmenu_custom

*rmenu_custom_spset

lsp 799,":a;sys/menu.jpg",0,0
lsp 701,":s/13,15,0,0;#ffffff#999999            SAVE",600,200
lsp 702,":s/13,15,0,0;#ffffff#999999            LOAD",600,230
lsp 703,":s/13,15,0,0;#ffffff#999999            SKIP",600,260
lsp 704,":s/13,15,0,0;#ffffff#999999      BACKLOG",600,290
lsp 705,":s/13,15,0,0;#ffffff#999999BACKGROUND",600,320
lsp 706,":s/13,15,0,0;#ffffff#999999          RESET",600,350

print 10,250

*rmenu_custom_btset
btndef ""
spbtn 701,1:spbtn 702,2:spbtn 703,3:spbtn 704,4:spbtn 705,5:spbtn 706,6

*rmenu_custom_btlp
btnwait2 %BtnRes

if %BtnRes=0 goto *rmenu_custom_btlp
if %BtnRes=-1 goto *rmenu_custom_end
if %BtnRes=1 btndef clear:csp -1:gosub *save
if %BtnRes=2 btndef clear:csp -1:gosub *load
if %BtnRes=3 btndef clear:csp -1:systemcall skip:return
if %BtnRes=4 btndef clear:csp -1:gosub *backlog
if %BtnRes=5 btndef clear:csp -1:systemcall windowerase:return
if %BtnRes=6 btndef clear:csp -1:goto *reset


*rmenu_custom_end
btndef clear
for %0=701 to 706
    csp %0
next
    csp 799
print 10,250
return


;-----Reset画面-----
*reset
lsp 799,":a;sys/menu.jpg",0,0
lsp 701,":s/13,15,0,0;#ffffffReset并回到TITLE吗?",290,200
lsp 702,":s/13,15,0,0;#ffffff#999999YES",310,230
lsp 703,":s/13,15,0,0;#ffffff#999999NO",450,230

btndef ""
spbtn 702,1:spbtn 703,2

*reset_lp
btnwait2 %BtnRes
if %BtnRes=0 goto *reset_lp
if %BtnRes=-1 goto *rmenu_custom
if %BtnRes=1 reset
if %BtnRes=2 btndef clear:csp -1:goto *rmenu_custom



这是上次问的帖子里别人给的范本的内容,其中没有rmenu,所以我不知道代码表里的rmenu怎么用了- -
=================================
defsub明白了,谢谢> <
回复 支持 反对

使用道具 举报

0

主题

3

帖子

29

积分

②入门

积分
29
发表于 2009-5-11 20:02:37 | 显示全部楼层
;输入判定
if %BtnRes=0 goto *text_cw_next    ;左Click
if %BtnRes=-42 goto *text_cw_next    ;↓
if %BtnRes=-3 goto *text_cw_next    ;????下
if %BtnRes=-11 goto *text_cw_next    ;Space
if %BtnRes=-19 goto *text_cw_next    ;Enter
if %BtnRes=-1 getscreenshot 80,60:gosub *text_cw_rclk:goto *text_cw    ;右Click
if %BtnRes=-10 getscreenshot 80,60:gosub *text_cw_rclk:goto *text_cw    ;Esc

if %BtnRes=-2 gosub *text_cw_lookback:goto *text_cw    ;????上(回想)
if %BtnRes=-40 gosub *text_cw_lookback:goto *text_cw    ;↑
;(这里尤其没看懂)
--------
同学你先去把btn命令和相对的btndef研究一下再说这个,还有gosub.....

这段说的很清楚的 比如说这段
if %BtnRes=-1 getscreenshot 80,60:gosub *text_cw_rclk:goto *text_cw    ;右Click ← 点击鼠标右键会出现以下的命令呈现的效果。

就是这段

;-----Click等待Subroutine----- ← 这个就已经说明了这个*text_cw是什么东西
*text_cw

getcursorpos %x,%y    ;Cursor位置取得
ispage %TextCC12Flug    ;Click等待or改页的判别

;将TextWindow在Effect时也显示
erasetextwindow 0

;Click等待Icon表示
if %TextCC12Flug=0 amsp TextCC1SpNum,%X,%Y+7:vsp TextCC1SpNum,1
if %TextCC12Flug=1 amsp TextCC2SpNum,%X,%Y+7:vsp TextCC2SpNum,1

print 1

btndef clear    ;按钮定义Clear
getenter    ;EnterKey受付


这样一长段我都看得很头痛....我昨天调试了一天的程序= =。。现在看到命令就崩溃。。
我觉得你应该先上手试着把自己明白的做出来 先让游戏试着跑起来 然后再一部分一部分地加上去。比如说自定义菜单 存档 欣赏界面等等

实践是检验真理的唯一标准。
---

我很多就是自己试出来的。。
使用技术手段突破一切障碍!
回复 支持 反对

使用道具 举报

4

主题

10

帖子

108

积分

③业余

积分
108
 楼主| 发表于 2009-5-17 02:28:17 | 显示全部楼层
很好很好,基本上右键菜单做出来了......
但是如果gosub里有csp -1的话,return回去后lsp都会消失了,怎么办呢- -
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2009-5-17 11:46:23 | 显示全部楼层
你就csp对应的图片不就好了...csp-1是全清的,当然会连原来的lsp一起干掉...
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

6

主题

29

帖子

325

积分

④见习

积分
325
发表于 2009-5-17 18:39:50 | 显示全部楼层
getparam是用于为defsub定义的指令获得属性值用的……

defsub test

*test
getparam %120,%121
……
return

这样在输入自定义指令test时这样输入:
test 5,1000
后续的5和1000就会被分别代入数字变量%120和%121
当然也可以用文字变量
回复 支持 反对

使用道具 举报

4

主题

10

帖子

108

积分

③业余

积分
108
 楼主| 发表于 2009-5-18 08:12:22 | 显示全部楼层
to D:可是不csp -1,右键菜单上就会映出原本的lsp,
我想的解决办法就是把右键里的lsp的层级提前,就是右键里用lsp0~100,正文用lsp 101~

还有谢谢LS> <
getparam大概明白了,大概- -

PS:小的在最上面,不习惯- -
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2009-5-18 16:17:31 | 显示全部楼层
引用第7楼sake于2009-05-18 08:12发表的  :
to D:可是不csp -1,右键菜单上就会映出原本的lsp,
我想的解决办法就是把右键里的lsp的层级提前,就是右键里用lsp0~100,正文用lsp 101~

还有谢谢LS> <
getparam大概明白了,大概- -

嗯,编号当然得这么安排了...= =
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 17:09 , Processed in 0.025335 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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