幻想森林

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

[NS] [分享]itoa命令/对话中显示半角数字、字母乱码解决办法

[复制链接]

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2006-5-27 18:15:45 | 显示全部楼层 |阅读模式
虽然很笨但是还是相当实用DI。

办法1:判断文字变量长度。
如果观察一下就可以注意到,当显示2005,12或者其他类似的,长度可以被2整除的数字时,是可以正确显示的。但是碰到235之类的,一定会变成乱码。具体的原理可能说不明白,但是可以确认的是NS显示文字的做法确实是一次显示1个全角字符或者2个半角字符。假如碰到独立的半角字符就会出错。
在这种情况下,为了可以正确的显示半角符号,首先要稍微预处理一下。
  1. ;一段姓名输入代码
  2. textfield $name,247,246,555,278,16,32,0 ;输入文字
  3. len %temp,$name ;计算长度
  4. div %temp,2 ;将长度/2取余
  5. if %temp<>0 add $name," " ;有半角符号出现时,加入半角空格1个
复制代码

不过,以上的东西,其实还是有BUG。在显示单个半角符号。例如玩家只输入了“1”“a”时,依然无法正确显示。而且,如果是全,半角混用的,例如输入“3月”时,依然会出问题。——不过我想没哪个玩家会这么起名的吧……

办法2:穷举法……
此是比较无奈的做法但是100%不会出错。专门针对因为以上所说的1位数无法正确显示的BUG。
就是……1位数单独处理XD
  1. ;日期显示代码
  2. date %year,%month,%day
  3. itoa $year,%year
  4. itoa $month,%month
  5. itoa $day,%day
  6. if %month=1 mov $month,"01"
  7. if %month=2 mov $month,"02"
  8. if %month=3 mov $month,"03"
  9. if %month=4 mov $month,"04"
  10. if %month=5 mov $month,"05"
  11. if %month=6 mov $month,"06"
  12. if %month=7 mov $month,"07"
  13. if %month=8 mov $month,"08"
  14. if %month=9 mov $month,"09"
  15. if %day=1 mov $day,"01"
  16. if %day=2 mov $day,"02"
  17. if %day=3 mov $day,"03"
  18. if %day=4 mov $day,"04"
  19. if %day=5 mov $day,"05"
  20. if %day=6 mov $day,"06"
  21. if %day=7 mov $day,"07"
  22. if %day=8 mov $day,"08"
  23. if %day=9 mov $day,"09"
  24. mov $date,":s/32,32,0,1;#000000"
  25. add $date,%year
  26. add $date,"年"
  27. add $date,$month
  28. add $date,"月"
  29. add $date,$day
  30. add $date,"日"
复制代码

以上,虽然说是穷举,但是工作量还是很小的。=v=
http://www.nvlmaker.net/
回复

使用道具 举报

10

主题

93

帖子

1065

积分

⑥精研

积分
1065
QQ
发表于 2006-5-27 18:19:44 | 显示全部楼层
抢了沙发在看~  [s:2]
回复 支持 反对

使用道具 举报

10

主题

93

帖子

1065

积分

⑥精研

积分
1065
QQ
发表于 2006-5-27 18:52:17 | 显示全部楼层
[s:8]
如果这样的话。。。。。汗~真恐怖~难道Narcissu里存档的计算公式就是解决这个问题的?
不知道那里有数组的教程。for命令看的也不是很明白~ [s:8]
*saveload_spload

for %save_num=1 to 20

    savetime %save_num,%save_month,%save_day,%save_hour,%save_minute
    ;セーブ無し
    if %save_month == 0 mov $save_str,":s/14,14,1;#EEFCFD#99CCFB--月--日--时--分":goto *saveload_spload_next

    mov $save_str,":s/14,14,1;#EEFCFD#99CCFB"
    mov %temp_num,%save_month:gosub *num2str
    add $save_str,$temp_str
    add $save_str,"月"
    mov %temp_num,%save_day:gosub *num2str
    add $save_str,$temp_str
    add $save_str,"日"
    mov %temp_num,%save_hour:gosub *num2str
    add $save_str,$temp_str
    add $save_str,"时"
    mov %temp_num,%save_minute:gosub *num2str
    add $save_str,$temp_str
    add $save_str,"分"

        *saveload_spload_next

    if %save_num <= 10 lsp %save_num+150,$save_str,84,18 + (%save_num * 49)
    if %save_num >= 11 lsp %save_num+150,$save_str,440,18 + ( (%save_num - 10) * 49)

    ;小見出しテキスト抽出
    mov $save_str,":s/14,14,1;#EEFCFD#99CCFB"
    mov %temp_num,%save_num+500
    add $save_str,$%temp_num

    if %save_num <= 10 lsp %save_num+130,$save_str,84,35 + (%save_num * 49)
    if %save_num >= 11 lsp %save_num+130,$save_str,440,35 + ( (%save_num - 10) * 49)

next
print 1

return
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2006-5-27 19:38:40 | 显示全部楼层
啊啊啊...图片位置居然能这么算...OTL...
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

10

主题

93

帖子

1065

积分

⑥精研

积分
1065
QQ
发表于 2006-5-27 22:03:05 | 显示全部楼层
[s:5]
我都看不懂~~~那是什么?
回复 支持 反对

使用道具 举报

10

主题

93

帖子

1065

积分

⑥精研

积分
1065
QQ
发表于 2006-5-27 22:11:40 | 显示全部楼层
[s:5]
那段就是那游戏的存档时间记录。比我的短多了。就是看不懂~ [s:3]
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2006-5-27 22:11:42 | 显示全部楼层
就是NS里的数字不但可以用变量代替,也可以用包含变量的计算式代替...
虽然是已经知道的功能,但是没想到可以这样用...或者说可以用到这么疯狂,带括号的加减乘除之类的...=v=
我也没试过这么复杂的循环呢... [s:4]
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

10

主题

93

帖子

1065

积分

⑥精研

积分
1065
QQ
发表于 2006-5-27 22:13:43 | 显示全部楼层
[s:8]
这个只是简单的电子书的游戏就这么BT~~ [s:6]
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2006-5-27 22:23:12 | 显示全部楼层
很容易看懂啊...
*num2str 应该就是对数字的具体处理部分.
其他部分就是简单的加入年月日.
至于FOR的用法,就是一次次循环把所有的存档都这么处理了.
因为每个存档的数据和存档图片位置都不一样,所以做得稍微有弹性了一点.
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

10

主题

93

帖子

1065

积分

⑥精研

积分
1065
QQ
发表于 2006-5-27 22:30:51 | 显示全部楼层
[s:5]
我刚看自己的东东突然想起来了。那个是算显示时间的位置吧~~~
至于for命令我自己也不清楚。
for %save_num=1 to 20
难道是~是这个变量在1到20之间?执行下面的东东~不过后面不是还有个step吗?每次递增数值 他怎么没有~~ [s:8]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 05:33 , Processed in 0.024369 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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