[分享]itoa命令/对话中显示半角数字、字母乱码解决办法
虽然很笨但是还是相当实用DI。办法1:判断文字变量长度。
如果观察一下就可以注意到,当显示2005,12或者其他类似的,长度可以被2整除的数字时,是可以正确显示的。但是碰到235之类的,一定会变成乱码。具体的原理可能说不明白,但是可以确认的是NS显示文字的做法确实是一次显示1个全角字符或者2个半角字符。假如碰到独立的半角字符就会出错。
在这种情况下,为了可以正确的显示半角符号,首先要稍微预处理一下。
;一段姓名输入代码
textfield $name,247,246,555,278,16,32,0 ;输入文字
len %temp,$name ;计算长度
div %temp,2 ;将长度/2取余
if %temp<>0 add $name," " ;有半角符号出现时,加入半角空格1个
不过,以上的东西,其实还是有BUG。在显示单个半角符号。例如玩家只输入了“1”“a”时,依然无法正确显示。而且,如果是全,半角混用的,例如输入“3月”时,依然会出问题。——不过我想没哪个玩家会这么起名的吧……
办法2:穷举法……
此是比较无奈的做法但是100%不会出错。专门针对因为以上所说的1位数无法正确显示的BUG。
就是……1位数单独处理XD
;日期显示代码
date %year,%month,%day
itoa $year,%year
itoa $month,%month
itoa $day,%day
if %month=1 mov $month,"01"
if %month=2 mov $month,"02"
if %month=3 mov $month,"03"
if %month=4 mov $month,"04"
if %month=5 mov $month,"05"
if %month=6 mov $month,"06"
if %month=7 mov $month,"07"
if %month=8 mov $month,"08"
if %month=9 mov $month,"09"
if %day=1 mov $day,"01"
if %day=2 mov $day,"02"
if %day=3 mov $day,"03"
if %day=4 mov $day,"04"
if %day=5 mov $day,"05"
if %day=6 mov $day,"06"
if %day=7 mov $day,"07"
if %day=8 mov $day,"08"
if %day=9 mov $day,"09"
mov $date,":s/32,32,0,1;#000000"
add $date,%year
add $date,"年"
add $date,$month
add $date,"月"
add $date,$day
add $date,"日"
以上,虽然说是穷举,但是工作量还是很小的。=v= 抢了沙发在看~
如果这样的话。。。。。汗~真恐怖~难道Narcissu里存档的计算公式就是解决这个问题的?
不知道那里有数组的教程。for命令看的也不是很明白~
*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 啊啊啊...图片位置居然能这么算...OTL...
我都看不懂~~~那是什么?
那段就是那游戏的存档时间记录。比我的短多了。就是看不懂~ 就是NS里的数字不但可以用变量代替,也可以用包含变量的计算式代替...
虽然是已经知道的功能,但是没想到可以这样用...或者说可以用到这么疯狂,带括号的加减乘除之类的...=v=
我也没试过这么复杂的循环呢...
这个只是简单的电子书的游戏就这么BT~~ 很容易看懂啊...
*num2str 应该就是对数字的具体处理部分.
其他部分就是简单的加入年月日.
至于FOR的用法,就是一次次循环把所有的存档都这么处理了.
因为每个存档的数据和存档图片位置都不一样,所以做得稍微有弹性了一点.
我刚看自己的东东突然想起来了。那个是算显示时间的位置吧~~~
至于for命令我自己也不清楚。
for %save_num=1 to 20
难道是~是这个变量在1到20之间?执行下面的东东~不过后面不是还有个step吗?每次递增数值 他怎么没有~~