赞 | 59 |
VIP | 321 |
好人卡 | 140 |
积分 | 66 |
经验 | 179075 |
最后登录 | 2024-6-19 |
在线时间 | 1275 小时 |
Lv4.逐梦者 (版主) 百合控
- 梦石
- 0
- 星屑
- 6643
- 在线时间
- 1275 小时
- 注册时间
- 2013-8-21
- 帖子
- 3657
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 余烬之中 于 2013-8-31 08:56 编辑
想了想还是加上这样一句:
以下很多废话,各位看官大可直接看向用特大号字体标示的正文部分!伸手党退散,这里没有你们想要的,只有问题和问题。
最近,想在游戏中模拟时间的流逝,比如当前是1234年5月6日7:08,经过一段时间后会增长,伴随昼夜和季节,
但是在论坛中搜索不到满足要求的,大多数只有昼夜,可能是我的搜索方式有问题,但是这些已经无关紧要了,因为我决定自己动手,丰衣足食
我知道可以用事件做,但是太麻烦,于是选择脚本{:2_270:}(我没想到这个更麻烦!{:2_286:})
废话不多说,一边用其他的脚本参考,一边翻阅系统中原有的脚本,
不得不说,6R的VA版本汉化十分不错,注释都很详细,连F1手册都小部分汉化了!
虽然接触RM没多少天,第一个游戏都没有完成,但这并不代表我很残,我只是很珍惜处女作,不能随随便便就没了{:2_262:}
开始写脚本,虽然说从没接触过,但是怎么说我将来也会是要攻读计算机的高材生{:2_275:},基本的编程基础还是有点了解的
跑题了……
设计思路是通过游戏时长来控制变化,我找了一会,找到了这个:
然后为了熟悉一般的命令,写了一个在菜单中显示游戏时长的脚本(这个就没什么发的必要了{:2_276:})
然后一下午,开始写时间流逝的脚本
中间有很多波折,比如我不知道$game_system.playtime_s返回的是字符串,后来知道了也不知道怎么处理(很幸运误打误撞找到了split)
比如弹十次框就有九次是类型不匹配string can't be coerced into Fixnum偏偏我还不知道怎么处理,ruby不支持VB中的CInt函数(废话)也不像C中的(int)(废话)用了format但是我好像看不到成效
比如不知道ruby语言的数据类型优先级结果算出来总是带小数点
比如不知道取余怎么办 我只知道MOD是取余\是取余 想了半天用%试了一下 也不知道是不是
突然想到 为什么不支持立即窗口?必须要进入游戏才能调试?ORZ(如果有人能告诉我游戏外调试的方法自然更好,需要安装Ruby编译器就算了)
正文
以下是我目前已完成的代码,仅仅在菜单中显示当前的游戏内时间,经过努力已经不会弹框了,但是……
#============================================================================== # ■ 模拟真实时间流逝 - By 影 2013.8 # V 1.0 # 在设定区进行设定便可以操作这个脚本的功能。 # 本脚本通过游戏时长来进行模拟。 #============================================================================== module MoVTime #============================================================================ # ■ 设定区A - 基础设定 #============================================================================ MoVTimeOn = true #MoVTimeOn - 开关 VTIcon = 234 #VTIcon - 时间前的图标 设为0则不显示 Chro = "公元" Sta_Year = 2013 Sta_Month = 8 Sta_Day = 30 Sta_Hour = 10 Sta_Min = 0 #以上设置游戏起始日期时间 Sta_WDay = 6 #Sta_WDay - 游戏起始星期几 0代表星期日 #============================================================================ # ■ 设定区A结束 #============================================================================ end module MoChro #============================================================================ # ■ 设定区B - 高级设定 #============================================================================ #AdvMode = false #高级模式关闭,如果开启则可以进行闰年、大小月的设定 #【但是】我还没有完成这部分……所以暂时不可用 VTSpe = 60 #VTSpe - 现实中一秒对应游戏多少分钟 VTYearM = 12 #VTYearM - 游戏中一年多少月 VTMonthD = 30 #VTMonth - 游戏中一月多少天 VTDayH = 24 #VTDayH - 游戏中一天几小时 VTHourM = 60 #VTHourM - 游戏中一小时几分钟 VTWeeks = ["周日","周一","周二","周三","周四","周五","周六"] #VTWeeks - 设定各星期的称谓,有意向的话也可以把所谓“星期”改为其他的周期 #比如八天为一个周期 #============================================================================ # ■ 设定区B结束 #============================================================================ end #============================================================================== # ■ Window_MoVTime #------------------------------------------------------------------------------ # 菜单画面中,显示当前游戏内部虚拟时间的窗口 #============================================================================== class Window_MoVTime < Window_Base #-------------------------------------------------------------------------- # ● 初始化对象 #-------------------------------------------------------------------------- def initialize super(0,0,160,80) temp = datetime.split("@") date = temp[0] time = temp[1] if MoVTime::VTIcon != 0 draw_icon(MoVTime::VTIcon,0,0,enabled = true) end if MoVTime::Chro != "" draw_text(0,0,130,25,MoVTime::Chro + " " + date,2) else draw_text(0,0,130,25,date,2) end draw_text(0,30,130,25,time,2) end #-------------------------------------------------------------------------- # ● 更新画面 #-------------------------------------------------------------------------- def update contents.clear temp = datetime.split("@") date = temp[0] time = temp[1] if MoVTime::VTIcon != 0 draw_icon(MoVTime::VTIcon,0,0,enabled = true) end if MoVTime::Chro != "" draw_text(0,0,130,25,MoVTime::Chro + " " + date,2) else draw_text(0,0,130,25,date,2) end draw_text(0,30,130,25,time,2) end #-------------------------------------------------------------------------- # ● 处理时间 #-------------------------------------------------------------------------- def datetime st = $game_system.playtime_s st2 = 0 tempM = 0 temp3 = 0 temp22 = 0 temp21 = 0 temp20 = 0 dt = "" temp1 = st.split(":") temp20 = temp1[0].to_i temp21 = temp1[1].to_i temp22 = temp1[2].to_i temp20 = temp20 * (60^2) temp21 = temp21 * 60 temp22 = temp22 st2 = st2 + temp20 + temp21 + temp22 tempM = MoChro::VTYearM * MoChro::VTMonthD tempM = tempM * MoChro::VTDayH * MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = temp3.to_s + "年" tempM = MoChro::VTMonthD * MoChro::VTDayH * MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = dt + temp3.to_s + "月" tempM = MoChro::VTDayH * MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = dt + temp3.to_s + "日" + "@" #这个@很重要 tempM = MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = dt + temp3.to_s + ":" temp3 = st2 * MoChro::VTSpe dt = dt + temp3.to_s return dt end end #============================================================================== # ■ Scene_Menu #------------------------------------------------------------------------------ # 菜单画面 #============================================================================== class Scene_Menu < Scene_MenuBase alias mostart start def start mostart if MoVTime::MoVTimeOn == true creat_movtime_window end end def creat_movtime_window @movtime = Window_MoVTime.new @movtime.x = 0 @movtime.y = @gold_window.y - 80 @movtime.width = @gold_window.width @movtime.height = 80 end end
#==============================================================================
# ■ 模拟真实时间流逝 - By 影 2013.8
# V 1.0
# 在设定区进行设定便可以操作这个脚本的功能。
# 本脚本通过游戏时长来进行模拟。
#==============================================================================
module MoVTime
#============================================================================
# ■ 设定区A - 基础设定
#============================================================================
MoVTimeOn = true
#MoVTimeOn - 开关
VTIcon = 234
#VTIcon - 时间前的图标 设为0则不显示
Chro = "公元"
Sta_Year = 2013
Sta_Month = 8
Sta_Day = 30
Sta_Hour = 10
Sta_Min = 0
#以上设置游戏起始日期时间
Sta_WDay = 6
#Sta_WDay - 游戏起始星期几 0代表星期日
#============================================================================
# ■ 设定区A结束
#============================================================================
end
module MoChro
#============================================================================
# ■ 设定区B - 高级设定
#============================================================================
#AdvMode = false
#高级模式关闭,如果开启则可以进行闰年、大小月的设定
#【但是】我还没有完成这部分……所以暂时不可用
VTSpe = 60
#VTSpe - 现实中一秒对应游戏多少分钟
VTYearM = 12
#VTYearM - 游戏中一年多少月
VTMonthD = 30
#VTMonth - 游戏中一月多少天
VTDayH = 24
#VTDayH - 游戏中一天几小时
VTHourM = 60
#VTHourM - 游戏中一小时几分钟
VTWeeks = ["周日","周一","周二","周三","周四","周五","周六"]
#VTWeeks - 设定各星期的称谓,有意向的话也可以把所谓“星期”改为其他的周期
#比如八天为一个周期
#============================================================================
# ■ 设定区B结束
#============================================================================
end
#==============================================================================
# ■ Window_MoVTime
#------------------------------------------------------------------------------
# 菜单画面中,显示当前游戏内部虚拟时间的窗口
#==============================================================================
class Window_MoVTime < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize
super(0,0,160,80)
temp = datetime.split("@")
date = temp[0]
time = temp[1]
if MoVTime::VTIcon != 0
draw_icon(MoVTime::VTIcon,0,0,enabled = true)
end
if MoVTime::Chro != ""
draw_text(0,0,130,25,MoVTime::Chro + " " + date,2)
else
draw_text(0,0,130,25,date,2)
end
draw_text(0,30,130,25,time,2)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
contents.clear
temp = datetime.split("@")
date = temp[0]
time = temp[1]
if MoVTime::VTIcon != 0
draw_icon(MoVTime::VTIcon,0,0,enabled = true)
end
if MoVTime::Chro != ""
draw_text(0,0,130,25,MoVTime::Chro + " " + date,2)
else
draw_text(0,0,130,25,date,2)
end
draw_text(0,30,130,25,time,2)
end
#--------------------------------------------------------------------------
# ● 处理时间
#--------------------------------------------------------------------------
def datetime
st = $game_system.playtime_s
st2 = 0
tempM = 0
temp3 = 0
temp22 = 0
temp21 = 0
temp20 = 0
dt = ""
temp1 = st.split(":")
temp20 = temp1[0].to_i
temp21 = temp1[1].to_i
temp22 = temp1[2].to_i
temp20 = temp20 * (60^2)
temp21 = temp21 * 60
temp22 = temp22
st2 = st2 + temp20 + temp21 + temp22
tempM = MoChro::VTYearM * MoChro::VTMonthD
tempM = tempM * MoChro::VTDayH * MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = temp3.to_s + "年"
tempM = MoChro::VTMonthD * MoChro::VTDayH * MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = dt + temp3.to_s + "月"
tempM = MoChro::VTDayH * MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = dt + temp3.to_s + "日" + "@"
#这个@很重要
tempM = MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = dt + temp3.to_s + ":"
temp3 = st2 * MoChro::VTSpe
dt = dt + temp3.to_s
return dt
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# 菜单画面
#==============================================================================
class Scene_Menu < Scene_MenuBase
alias mostart start
def start
mostart
if MoVTime::MoVTimeOn == true
creat_movtime_window
end
end
def creat_movtime_window
@movtime = Window_MoVTime.new
@movtime.x = 0
@movtime.y = @gold_window.y - 80
@movtime.width = @gold_window.width
@movtime.height = 80
end
end
我相信其他的地方一定没有问题,问题一定在这一段:
def datetime st = $game_system.playtime_s st2 = 0 tempM = 0 temp3 = 0 temp22 = 0 temp21 = 0 temp20 = 0 dt = "" temp1 = st.split(":") temp20 = temp1[0].to_i temp21 = temp1[1].to_i temp22 = temp1[2].to_i temp20 = temp20 * (60^2) temp21 = temp21 * 60 temp22 = temp22 st2 = st2 + temp20 + temp21 + temp22 tempM = MoChro::VTYearM * MoChro::VTMonthD tempM = tempM * MoChro::VTDayH * MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = temp3.to_s + "年" tempM = MoChro::VTMonthD * MoChro::VTDayH * MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = dt + temp3.to_s + "月" tempM = MoChro::VTDayH * MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = dt + temp3.to_s + "日" + "@" #这个@很重要 tempM = MoChro::VTHourM temp3 = (st2 * MoChro::VTSpe) % tempM st2 = st2 - temp3 * tempM dt = dt + temp3.to_s + ":" temp3 = st2 * MoChro::VTSpe dt = dt + temp3.to_s return dt end
def datetime
st = $game_system.playtime_s
st2 = 0
tempM = 0
temp3 = 0
temp22 = 0
temp21 = 0
temp20 = 0
dt = ""
temp1 = st.split(":")
temp20 = temp1[0].to_i
temp21 = temp1[1].to_i
temp22 = temp1[2].to_i
temp20 = temp20 * (60^2)
temp21 = temp21 * 60
temp22 = temp22
st2 = st2 + temp20 + temp21 + temp22
tempM = MoChro::VTYearM * MoChro::VTMonthD
tempM = tempM * MoChro::VTDayH * MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = temp3.to_s + "年"
tempM = MoChro::VTMonthD * MoChro::VTDayH * MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = dt + temp3.to_s + "月"
tempM = MoChro::VTDayH * MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = dt + temp3.to_s + "日" + "@"
#这个@很重要
tempM = MoChro::VTHourM
temp3 = (st2 * MoChro::VTSpe) % tempM
st2 = st2 - temp3 * tempM
dt = dt + temp3.to_s + ":"
temp3 = st2 * MoChro::VTSpe
dt = dt + temp3.to_s
return dt
end
这个算法有问题,我相信它一定有问题
那个temp20 21 22什么的本来准备用数组,但是我不知道ruby怎么预定义数组,总是报错
每次的TempM存储被除数(废话) 把游戏时长换算成秒存储在st2中,然后st2乘以(现实中)一秒所代表的(游戏内)分钟数,再取它除以TempM的余数 就是对应的数字
第一次TempM代表(游戏内) 一年的分钟数 第二次代表(游戏内) 一月 第三次(游戏内)一天 第四次(游戏内)一小时
每次除过之后将已经换算过的从st2中减去
用dt记录年月日@时分,然后再以@为界分割,以便写成两行
结果……………………
图标的覆盖等有时间再改,我现在只想知道
怎么会这样???
另外
如何才能显示定义一个变量为整数型,
我不要带小数点的分钟!!!
最后……
我相信,一定会有好心人来帮我的!
|
评分
-
查看全部评分
|